You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2017/08/10 15:06:08 UTC

[01/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 8d17471fb -> 47be635d1


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html
deleted file mode 100644
index c8f1443..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.commons.logging.Log;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.commons.logging.LogFactory;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Cell;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Put;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Result;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.junit.AfterClass;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.junit.Assert;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.junit.BeforeClass;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.junit.Test;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.experimental.categories.Category;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>@Category(MediumTests.class)<a name="line.50"></a>
-<span class="sourceLineNo">051</span>public class TestScannerCursor {<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final Log LOG =<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      LogFactory.getLog(TestScannerCursor.class);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static Table TABLE = null;<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * Table configuration<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private static TableName TABLE_NAME = TableName.valueOf("TestScannerCursor");<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private static int NUM_ROWS = 5;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private static int NUM_FAMILIES = 2;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static int NUM_QUALIFIERS = 2;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static int VALUE_SIZE = 10;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private static final int TIMEOUT = 4000;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  @BeforeClass<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public static void setUpBeforeClass() throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, TIMEOUT);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, TIMEOUT);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // Check the timeout condition after every cell<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    TEST_UTIL.startMiniCluster(1);<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    ht.put(puts);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    return ht;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      byte[] value) throws IOException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    Put put;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      put = new Put(rows[row]);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          put.add(kv);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      puts.add(put);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    return puts;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  @AfterClass<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public static void tearDownAfterClass() throws Exception {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public static class SparseFilter extends FilterBase {<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      Threads.sleep(TIMEOUT / 2 + 100);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ? ReturnCode.INCLUDE<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          : ReturnCode.SKIP;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    public static Filter parseFrom(final byte[] pbBytes) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return new SparseFilter();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<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<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  public void testHeartbeatWithSparseFilter() throws Exception {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    Scan scan = new Scan();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    scan.setNeedCursorResult(true);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    scan.setAllowPartialResults(true);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    scan.setFilter(new SparseFilter());<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try(ResultScanner scanner = TABLE.getScanner(scan)) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      int num = 0;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      Result r;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      while ((r = scanner.next()) != null) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>        if (num &lt; (NUM_ROWS - 1) * NUM_FAMILIES * NUM_QUALIFIERS) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          Assert.assertTrue(r.isCursor());<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getCursor().getRow());<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        } else {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>          Assert.assertFalse(r.isCursor());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getRow());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        num++;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  @Test<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  public void testSizeLimit() throws IOException {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Scan scan = new Scan();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    scan.setMaxResultSize(1);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    scan.setNeedCursorResult(true);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    try (ResultScanner scanner = TABLE.getScanner(scan)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      int num = 0;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      Result r;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      while ((r = scanner.next()) != null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>        if (num % (NUM_FAMILIES * NUM_QUALIFIERS) != (NUM_FAMILIES * NUM_QUALIFIERS)-1) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          Assert.assertTrue(r.isCursor());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getCursor().getRow());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        } else {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          Assert.assertFalse(r.isCursor());<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getRow());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        num++;<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>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[28/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
index c21aec6..0362d7f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
@@ -61,516 +61,530 @@
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.53"></a>
 <span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.54"></a>
 <span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Retry caller for scanning a region.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * &lt;p&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * reference of this object and use it to open new single region scanners.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final HashedWheelTimer retryTimer;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private final Scan scan;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ScanMetrics scanMetrics;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final long scannerId;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final ScanResultCache resultCache;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final RawScanResultConsumer consumer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final ClientService.Interface stub;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final HRegionLocation loc;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final boolean regionServerRemote;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final long pauseNs;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final int maxAttempts;<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final long scanTimeoutNs;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final long rpcTimeoutNs;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private final int startLogErrorsCnt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private final HBaseRpcController controller;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private byte[] nextStartRowWhenError;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private boolean includeNextStartRowWhenError;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private long nextCallStartNs;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private int tries;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private long nextCallSeq = -1L;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private enum ScanControllerState {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // usage. We use two things to prevent invalid usage:<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // to be used in the future.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // package private methods can only be called within the implementation of<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Make sure the methods are only called in this thread.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private final Thread callerThread = Thread.currentThread();<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // INITIALIZED -&gt; DESTROYED<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private ScanResumerImpl resumer;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    private void preCheck() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        "The current thread is %s, expected thread is %s, " +<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        Thread.currentThread(), callerThread);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        "Invalid Stopper state %s", state);<a name="line.163"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Retry caller for scanning a region.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * reference of this object and use it to open new single region scanners.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>@InterfaceAudience.Private<a name="line.71"></a>
+<span class="sourceLineNo">072</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final HashedWheelTimer retryTimer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final Scan scan;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final ScanMetrics scanMetrics;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final long scannerId;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final ScanResultCache resultCache;<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final RawScanResultConsumer consumer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ClientService.Interface stub;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final HRegionLocation loc;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final boolean regionServerRemote;<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private final long pauseNs;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final int maxAttempts;<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final long scanTimeoutNs;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private final long rpcTimeoutNs;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private final int startLogErrorsCnt;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private final HBaseRpcController controller;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  private byte[] nextStartRowWhenError;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private boolean includeNextStartRowWhenError;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private long nextCallStartNs;<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private int tries;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long nextCallSeq = -1L;<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private enum ScanControllerState {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // usage. We use two things to prevent invalid usage:<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // to be used in the future.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // package private methods can only be called within the implementation of<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // Make sure the methods are only called in this thread.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    private final Thread callerThread;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private final Optional&lt;Cursor&gt; cursor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // INITIALIZED -&gt; DESTROYED<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private ScanResumerImpl resumer;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    public ScanControllerImpl(ScanResponse resp) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      callerThread = Thread.currentThread();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      cursor = resp.hasCursor() ? Optional.of(ProtobufUtil.toCursor(resp.getCursor()))<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          : Optional.empty();<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    }<a name="line.164"></a>
 <span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    public ScanResumer suspend() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      preCheck();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      state = ScanControllerState.SUSPENDED;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      this.resumer = resumer;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return resumer;<a name="line.172"></a>
+<span class="sourceLineNo">166</span>    private void preCheck() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        "The current thread is %s, expected thread is %s, " +<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        Thread.currentThread(), callerThread);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        "Invalid Stopper state %s", state);<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>    @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public void terminate() {<a name="line.176"></a>
+<span class="sourceLineNo">176</span>    public ScanResumer suspend() {<a name="line.176"></a>
 <span class="sourceLineNo">177</span>      preCheck();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      state = ScanControllerState.TERMINATED;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // return the current state, and set the state to DESTROYED.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    ScanControllerState destroy() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      ScanControllerState state = this.state;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      this.state = ScanControllerState.DESTROYED;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      return state;<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>  private enum ScanResumerState {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  // controller.suspend().resume()<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // package private methods can only be called within the implementation of<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // INITIALIZED -&gt; RESUMED<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private ScanResponse resp;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int numberOfCompleteRows;<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // renewal task.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private Timeout leaseRenewer;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void resume() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ScanResponse localResp;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      int localNumberOfCompleteRows;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      synchronized (this) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          // user calls this method before we call prepare, so just set the state to<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          // RESUMED, the implementation will just go on.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          state = ScanResumerState.RESUMED;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          return;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        if (state == ScanResumerState.RESUMED) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          // already resumed, give up.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          return;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        state = ScanResumerState.RESUMED;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        if (leaseRenewer != null) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          leaseRenewer.cancel();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        localResp = this.resp;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      completeOrNext(localResp, localNumberOfCompleteRows);<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>    private void scheduleRenewLeaseTask() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      // the scan has already been resumed, give up<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (state == ScanResumerState.RESUMED) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        return;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      renewLease();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      scheduleRenewLeaseTask();<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>    // return false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // for more details.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      if (state == ScanResumerState.RESUMED) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return false;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      state = ScanResumerState.SUSPENDED;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.resp = resp;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // automatically so we do not need to renew lease.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      if (resp.getMoreResultsInRegion()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        // schedule renew lease task<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        scheduleRenewLeaseTask();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return true;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.retryTimer = retryTimer;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.scan = scan;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    this.scanMetrics = scanMetrics;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    this.scannerId = scannerId;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.resultCache = resultCache;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.consumer = consumer;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    this.stub = stub;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    this.loc = loc;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.pauseNs = pauseNs;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    this.maxAttempts = maxAttempts;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    if (scan.isReversed()) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    } else {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this.exceptions = new ArrayList&lt;&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private long elapsedMs() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<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 long remainingTimeNs() {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void closeScanner() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    resetController(controller, rpcTimeoutNs);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    stub.scan(controller, req, resp -&gt; {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      if (controller.failed()) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          controller.getFailed());<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">178</span>      state = ScanControllerState.SUSPENDED;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      this.resumer = resumer;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return resumer;<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>    @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    public void terminate() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      preCheck();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      state = ScanControllerState.TERMINATED;<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>    // return the current state, and set the state to DESTROYED.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    ScanControllerState destroy() {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      ScanControllerState state = this.state;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      this.state = ScanControllerState.DESTROYED;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      return state;<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>    public Optional&lt;Cursor&gt; cursor() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return cursor;<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>  private enum ScanResumerState {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  // controller.suspend().resume()<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  // package private methods can only be called within the implementation of<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // INITIALIZED -&gt; RESUMED<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private ScanResponse resp;<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private int numberOfCompleteRows;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // renewal task.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private Timeout leaseRenewer;<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    public void resume() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      ScanResponse localResp;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      int localNumberOfCompleteRows;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      synchronized (this) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          // user calls this method before we call prepare, so just set the state to<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          // RESUMED, the implementation will just go on.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          state = ScanResumerState.RESUMED;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (state == ScanResumerState.RESUMED) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // already resumed, give up.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          return;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        state = ScanResumerState.RESUMED;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (leaseRenewer != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          leaseRenewer.cancel();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        localResp = this.resp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      completeOrNext(localResp, localNumberOfCompleteRows);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    private void scheduleRenewLeaseTask() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      // the scan has already been resumed, give up<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      if (state == ScanResumerState.RESUMED) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      renewLease();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      scheduleRenewLeaseTask();<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 false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    // for more details.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      if (state == ScanResumerState.RESUMED) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        return false;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      state = ScanResumerState.SUSPENDED;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.resp = resp;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // automatically so we do not need to renew lease.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (resp.getMoreResultsInRegion()) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        // schedule renew lease task<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        scheduleRenewLeaseTask();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      }<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><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this.retryTimer = retryTimer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    this.scan = scan;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.scanMetrics = scanMetrics;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    this.scannerId = scannerId;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.resultCache = resultCache;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    this.consumer = consumer;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.stub = stub;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    this.loc = loc;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    this.pauseNs = pauseNs;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    this.maxAttempts = maxAttempts;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (scan.isReversed()) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } else {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    this.exceptions = new ArrayList&lt;&gt;();<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>  private long elapsedMs() {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private long remainingTimeNs() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void completeExceptionally(boolean closeScanner) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    resultCache.clear();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (closeScanner) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      closeScanner();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    future.complete(false);<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 void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    scan.withStartRow(row, inclusive);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    future.complete(true);<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>  private void completeWhenError(boolean closeScanner) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    resultCache.clear();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (closeScanner) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      closeScanner();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (nextStartRowWhenError != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    future.complete(true);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private void onError(Throwable error) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    error = translateException(error);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          " ms",<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        error);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    exceptions.add(qt);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (tries &gt;= maxAttempts) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      completeExceptionally(!scannerClosed);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long delayNs;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    if (scanTimeoutNs &gt; 0) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      if (maxDelayNs &lt;= 0) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        completeExceptionally(!scannerClosed);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        return;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (scannerClosed) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      completeWhenError(false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      completeWhenError(true);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    if (error instanceof DoNotRetryIOException) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      completeExceptionally(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    tries++;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<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 void updateNextStartRowWhenError(Result result) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    nextStartRowWhenError = result.getRow();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    includeNextStartRowWhenError = result.mayHaveMoreCellsInRow();<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>  private void completeWhenNoMoreResultsInRegion() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    if (noMoreResultsForScan(scan, loc.getRegionInfo())) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      completeNoMoreResults();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      completeWithNextStartRow(loc.getRegionInfo().getEndKey(), true);<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>  private void completeReversedWhenNoMoreResultsInRegion() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (noMoreResultsForReverseScan(scan, loc.getRegionInfo())) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      completeNoMoreResults();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      completeWithNextStartRow(loc.getRegionInfo().getStartKey(), false);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private void completeOrNext(ScanResponse resp, int numberOfCompleteRows) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    if (resp.hasMoreResults() &amp;&amp; !resp.getMoreResults()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      // RS tells us there is no more data for the whole scan<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      completeNoMoreResults();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      return;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (scan.getLimit() &gt; 0) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // The RS should have set the moreResults field in ScanResponse to false when we have reached<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // the limit, so we add an assert here.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      int newLimit = scan.getLimit() - numberOfCompleteRows;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      assert newLimit &gt; 0;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      scan.setLimit(newLimit);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // as in 2.0 this value will always be set<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (!resp.getMoreResultsInRegion()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      completeWhenNoMoreResultsInRegion.run();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    next();<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>  private void onComplete(HBaseRpcController controller, ScanResponse resp) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (controller.failed()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      onError(controller.getFailed());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    updateServerSideMetrics(scanMetrics, resp);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    boolean isHeartbeatMessage = resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Result[] results;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    int numberOfCompleteRowsBefore = resultCache.numberOfCompleteRows();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    try {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      Result[] rawResults = ResponseConverter.getResults(controller.cellScanner(), resp);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      updateResultsMetrics(scanMetrics, rawResults, isHeartbeatMessage);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      results = resultCache.addAndGet(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        Optional.ofNullable(rawResults).orElse(ScanResultCache.EMPTY_RESULT_ARRAY),<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        isHeartbeatMessage);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } catch (IOException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // We can not retry here. The server has responded normally and the call sequence has been<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // increased so a new scan with the same call sequence will cause an<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // OutOfOrderScannerNextException. Let the upper layer open a new scanner.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      LOG.warn("decode scan response failed", e);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      completeWhenError(true);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ScanControllerImpl scanController = new ScanControllerImpl();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    if (results.length &gt; 0) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      updateNextStartRowWhenError(results[results.length - 1]);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      consumer.onNext(results, scanController);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    } else if (resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      consumer.onHeartbeat(scanController);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    ScanControllerState state = scanController.destroy();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (state == ScanControllerState.TERMINATED) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      if (resp.getMoreResultsInRegion()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // we have more results in region but user request to stop the scan, so we need to close the<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // scanner explicitly.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        closeScanner();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      completeNoMoreResults();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      return;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    int numberOfCompleteRows = resultCache.numberOfCompleteRows() - numberOfCompleteRowsBefore;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (state == ScanControllerState.SUSPENDED) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (scanController.resumer.prepare(resp, numberOfCompleteRows)) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        return;<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>    completeOrNext(resp, numberOfCompleteRows);<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>  private void call() {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // As we have a call sequence for scan, it is useless to have a different rpc timeout which is<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // less than the scan timeout. If the server does not respond in time(usually this will not<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // happen as we have heartbeat now), we will get an OutOfOrderScannerNextException when<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // resending the next request and the only way to fix this is to close the scanner and open a<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // new one.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    long callTimeoutNs;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    if (scanTimeoutNs &gt; 0) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      long remainingNs = scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      if (remainingNs &lt;= 0) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        completeExceptionally(true);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        return;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      callTimeoutNs = remainingNs;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    } else {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      callTimeoutNs = 0L;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (tries &gt; 1) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      incRPCRetriesMetrics(scanMetrics, regionServerRemote);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    resetController(controller, callTimeoutNs);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    ScanRequest req = RequestConverter.buildScanRequest(scannerId, scan.getCaching(), false,<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      nextCallSeq, false, false, scan.getLimit());<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    stub.scan(controller, req, resp -&gt; onComplete(controller, resp));<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>  private void next() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    nextCallSeq++;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    tries = 1;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    exceptions.clear();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    nextCallStartNs = System.nanoTime();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    call();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  private void renewLease() {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    nextCallSeq++;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    resetController(controller, rpcTimeoutNs);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    ScanRequest req =<a name="line.547"></a>
-<span class="sourceLineNo">548</span>        RequestConverter.buildScanRequest(scannerId, 0, false, nextCallSeq, false, true, -1);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    stub.scan(controller, req, resp -&gt; {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    });<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Now we will also fetch some cells along with the scanner id when opening a scanner, so we also<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * need to process the ScanResponse for the open scanner request. The HBaseRpcController for the<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * open scanner request is also needed because we may have some data in the CellScanner which is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * contained in the controller.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @return {@code true} if we should continue, otherwise {@code false}.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public CompletableFuture&lt;Boolean&gt; start(HBaseRpcController controller,<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      ScanResponse respWhenOpen) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    onComplete(controller, respWhenOpen);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    return future;<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">340</span>  private void closeScanner() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    resetController(controller, rpcTimeoutNs);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    stub.scan(controller, req, resp -&gt; {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (controller.failed()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          controller.getFailed());<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>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  private void completeExceptionally(boolean closeScanner) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    resultCache.clear();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (closeScanner) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      closeScanner();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    future.complete(false);<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>  private void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    scan.withStartRow(row, inclusive);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    future.complete(true);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private void completeWhenError(boolean closeScanner) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    resultCache.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (closeScanner) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      closeScanner();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    if (nextStartRowWhenError != null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    future.complete(true);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private void onError(Throwable error) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    error = translateException(error);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          " ms",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        error);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    exceptions.add(qt);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (tries &gt;= maxAttempts) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      completeExceptionally(!scannerClosed);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      return;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    long delayNs;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (scanTimeoutNs &gt; 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (maxDelayNs &lt;= 0) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        completeExceptionally(!scannerClosed);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        return;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    } else {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (scannerClosed) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      completeWhenError(false);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      completeWhenError(true);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    if (error instanceof DoNotRetryIOException) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      completeExceptionally(true);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    tries++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private void updateNextStartRowWhenError(Result result) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    nextStartRowWhenError = result.getRow();<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    includeNextStartRowWhenError = result.mayHaveMore

<TRUNCATED>

[03/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html
deleted file mode 100644
index 64759dc..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html
+++ /dev/null
@@ -1,638 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestScannerCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestScannerCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":10,"i5":10};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestScannerCursor.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/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.regionserver</div>
-<h2 title="Class TestScannerCursor" class="title">Class TestScannerCursor</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.regionserver.TestScannerCursor</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.51">TestScannerCursor</a>
-extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
-<!--   -->
-</a>
-<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor.SparseFilter</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static byte[][]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#FAMILIES">FAMILIES</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#FAMILY">FAMILY</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#LOG">LOG</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#NUM_FAMILIES">NUM_FAMILIES</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#NUM_ROWS">NUM_ROWS</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#QUALIFIER">QUALIFIER</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static byte[][]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#QUALIFIERS">QUALIFIERS</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#ROW">ROW</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static byte[][]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#ROWS">ROWS</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.hadoop.hbase.client.Table</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TABLE">TABLE</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TABLE_NAME">TABLE_NAME</a></span></code>
-<div class="block">Table configuration</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TIMEOUT">TIMEOUT</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#VALUE">VALUE</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#VALUE_SIZE">VALUE_SIZE</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TestScannerCursor--">TestScannerCursor</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) static <a href="http://docs.oracle.com/javase/8/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;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">createPuts</a></span>(byte[][]&nbsp;rows,
-          byte[][]&nbsp;families,
-          byte[][]&nbsp;qualifiers,
-          byte[]&nbsp;value)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) static org.apache.hadoop.hbase.client.Table</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#createTestTable-org.apache.hadoop.hbase.TableName-byte:A:A-byte:A:A-byte:A:A-byte:A-">createTestTable</a></span>(org.apache.hadoop.hbase.TableName&nbsp;name,
-               byte[][]&nbsp;rows,
-               byte[][]&nbsp;families,
-               byte[][]&nbsp;qualifiers,
-               byte[]&nbsp;cellValue)</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#testHeartbeatWithSparseFilter--">testHeartbeatWithSparseFilter</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#testSizeLimit--">testSizeLimit</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/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/8/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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="LOG">
-<!--   -->
-</a>
-<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/TestScannerCursor.html#line.53">LOG</a></pre>
-</li>
-</ul>
-<a name="TEST_UTIL">
-<!--   -->
-</a>
-<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/TestScannerCursor.html#line.56">TEST_UTIL</a></pre>
-</li>
-</ul>
-<a name="TABLE">
-<!--   -->
-</a>
-<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/TestScannerCursor.html#line.58">TABLE</a></pre>
-</li>
-</ul>
-<a name="TABLE_NAME">
-<!--   -->
-</a>
-<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/TestScannerCursor.html#line.63">TABLE_NAME</a></pre>
-<div class="block">Table configuration</div>
-</li>
-</ul>
-<a name="NUM_ROWS">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>NUM_ROWS</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.65">NUM_ROWS</a></pre>
-</li>
-</ul>
-<a name="ROW">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ROW</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.66">ROW</a></pre>
-</li>
-</ul>
-<a name="ROWS">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ROWS</h4>
-<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.67">ROWS</a></pre>
-</li>
-</ul>
-<a name="NUM_FAMILIES">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>NUM_FAMILIES</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.69">NUM_FAMILIES</a></pre>
-</li>
-</ul>
-<a name="FAMILY">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>FAMILY</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.70">FAMILY</a></pre>
-</li>
-</ul>
-<a name="FAMILIES">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>FAMILIES</h4>
-<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.71">FAMILIES</a></pre>
-</li>
-</ul>
-<a name="NUM_QUALIFIERS">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>NUM_QUALIFIERS</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.73">NUM_QUALIFIERS</a></pre>
-</li>
-</ul>
-<a name="QUALIFIER">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>QUALIFIER</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.74">QUALIFIER</a></pre>
-</li>
-</ul>
-<a name="QUALIFIERS">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>QUALIFIERS</h4>
-<pre>private static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.75">QUALIFIERS</a></pre>
-</li>
-</ul>
-<a name="VALUE_SIZE">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>VALUE_SIZE</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.77">VALUE_SIZE</a></pre>
-</li>
-</ul>
-<a name="VALUE">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>VALUE</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.78">VALUE</a></pre>
-</li>
-</ul>
-<a name="TIMEOUT">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>TIMEOUT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.80">TIMEOUT</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.TestScannerCursor.TIMEOUT">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="TestScannerCursor--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>TestScannerCursor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.51">TestScannerCursor</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="setUpBeforeClass--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.83">setUpBeforeClass</a>()
-                             throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="createTestTable-org.apache.hadoop.hbase.TableName-byte:A:A-byte:A:A-byte:A:A-byte:A-">
-<!--   -->
-</a>
-<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/TestScannerCursor.html#line.97">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
-                                                            byte[][]&nbsp;rows,
-                                                            byte[][]&nbsp;families,
-                                                            byte[][]&nbsp;qualifiers,
-                                                            byte[]&nbsp;cellValue)
-                                                     throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>createPuts</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/8/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/TestScannerCursor.html#line.105">createPuts</a>(byte[][]&nbsp;rows,
-                                                                byte[][]&nbsp;families,
-                                                                byte[][]&nbsp;qualifiers,
-                                                                byte[]&nbsp;value)
-                                                         throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="tearDownAfterClass--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.125">tearDownAfterClass</a>()
-                               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testHeartbeatWithSparseFilter--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testHeartbeatWithSparseFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.144">testHeartbeatWithSparseFilter</a>()
-                                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="testSizeLimit--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>testSizeLimit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.169">testSizeLimit</a>()
-                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestScannerCursor.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/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 781b2ae1..6ce7f4e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -844,7 +844,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellGridStoreScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellGridStoreScanner.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellGridStoreScanner.html
index e857136..8272559 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellGridStoreScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellGridStoreScanner.html
@@ -183,7 +183,7 @@ extends org.apache.hadoop.hbase.regionserver.StoreScanner</pre>
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.StoreScanner</h3>
-<code>currentScanners, DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, LAZY_SEEK_ENABLED_BY_DEFAULT, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
+<code>currentScanners, DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, LAZY_SEEK_ENABLED_BY_DEFAULT, prevCell, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsNoOptimizeStoreScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsNoOptimizeStoreScanner.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsNoOptimizeStoreScanner.html
index 5a941c4..9ed65c4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsNoOptimizeStoreScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsNoOptimizeStoreScanner.html
@@ -177,7 +177,7 @@ extends org.apache.hadoop.hbase.regionserver.StoreScanner</pre>
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.StoreScanner</h3>
-<code>currentScanners, DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, LAZY_SEEK_ENABLED_BY_DEFAULT, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
+<code>currentScanners, DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, LAZY_SEEK_ENABLED_BY_DEFAULT, prevCell, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsStoreScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsStoreScanner.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsStoreScanner.html
index b3146dc..db57c59 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsStoreScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStoreScanner.CellWithVersionsStoreScanner.html
@@ -177,7 +177,7 @@ extends org.apache.hadoop.hbase.regionserver.StoreScanner</pre>
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.StoreScanner</h3>
-<code>currentScanners, DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, LAZY_SEEK_ENABLED_BY_DEFAULT, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
+<code>currentScanners, DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, LAZY_SEEK_ENABLED_BY_DEFAULT, prevCell, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.SparseFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.SparseFilter.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.SparseFilter.html
deleted file mode 100644
index 6280b12..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.SparseFilter.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.regionserver.TestScannerCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.TestScannerCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.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/TestScannerCursor.SparseFilter.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.TestScannerCursor.SparseFilter" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.TestScannerCursor.SparseFilter</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.regionserver.TestScannerCursor.SparseFilter</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.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/TestScannerCursor.SparseFilter.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.html
deleted file mode 100644
index 8913acf..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/class-use/TestScannerCursor.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.regionserver.TestScannerCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.regionserver.TestScannerCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.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/TestScannerCursor.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.regionserver.TestScannerCursor" class="title">Uses of Class<br>org.apache.hadoop.hbase.regionserver.TestScannerCursor</h2>
-</div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.regionserver.TestScannerCursor</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.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/TestScannerCursor.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 69a6144..f900512 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-frame.html
@@ -184,8 +184,6 @@
 <li><a href="TestRSKilledWhenInitializing.RegisterAndDieRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestRSKilledWhenInitializing.RegisterAndDieRegionServer</a></li>
 <li><a href="TestRSStatusServlet.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestRSStatusServlet</a></li>
 <li><a href="TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScanner</a></li>
-<li><a href="TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerCursor</a></li>
-<li><a href="TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerCursor.SparseFilter</a></li>
 <li><a href="TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages</a></li>
 <li><a href="TestScannerHeartbeatMessages.HeartbeatHRegion.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatHRegion</a></li>
 <li><a href="TestScannerHeartbeatMessages.HeartbeatHRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatHRegionServer</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 1e2a967..ccc2ef8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-summary.html
@@ -963,14 +963,6 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor.SparseFilter</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages</a></td>
 <td class="colLast">
 <div class="block">Here we test to make sure that scans return the expected Results when the server is sending the

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 8a65e8a..7336b92 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -195,7 +195,6 @@
 <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/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerCursor.SparseFilter</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="typeNameLink">TestScannerHeartbeatMessages.SparseFilter</span></a></li>
 </ul>
 </li>
@@ -524,7 +523,6 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRSKilledWhenInitializing</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRSStatusServlet</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScanner</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerCursor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerHeartbeatMessages</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerHeartbeatMessages.HeartbeatRegionScanner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerHeartbeatMessages.HeartbeatReversedRegionScanner</span></a></li>
@@ -626,11 +624,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 842c1b7..841feb1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -249,9 +249,9 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.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="typeNameLink">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="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.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="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</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="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</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="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index a8434ed..2573409 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -140,8 +140,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 6cc4ca1..5c08b05 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -395,6 +395,12 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/TestProtobufLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">TestProtobufLog</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractTestScanCursor</span></a>
+<ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestRawAsyncScanCursor</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestScanCursor</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/AbstractTestScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">AbstractTestScanQueryMatcher</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/TestCompactionScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">TestCompactionScanQueryMatcher</span></a></li>
@@ -951,6 +957,7 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.filter.FilterBase
 <ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractTestScanCursor.SparseFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">ColumnCountOnRowFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterAllFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterAllFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.PrefixFilter
@@ -966,7 +973,6 @@
 <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="typeNameLink">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="typeNameLink">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="typeNameLink">TestRegionObserverScannerOpenHook.NoDataFilter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerCursor.SparseFilter</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="typeNameLink">TestScannerHeartbeatMessages.SparseFilter</span></a></li>
 </ul>
 </li>
@@ -3152,7 +3158,6 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestScan</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">TestScanDeleteTracker</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScanner</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerCursor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestScannerFromBucketCache</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerHeartbeatMessages</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerHeartbeatMessages.HeartbeatRegionScanner</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html
new file mode 100644
index 0000000..94cbbb0
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.Cell;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HConstants;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.regionserver.StoreScanner;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.AfterClass;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>public abstract class AbstractTestScanCursor {<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * Table configuration<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  protected static TableName TABLE_NAME = TableName.valueOf("TestScanCursor");<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  protected static int NUM_ROWS = 5;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  protected static byte[] ROW = Bytes.toBytes("testRow");<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  protected static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  protected static int NUM_FAMILIES = 2;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  protected static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  protected static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  protected static int NUM_QUALIFIERS = 2;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  protected static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  protected static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  protected static int VALUE_SIZE = 10;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  protected static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected static final int TIMEOUT = 4000;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @BeforeClass<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static void setUpBeforeClass() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, TIMEOUT);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, TIMEOUT);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // Check the timeout condition after every cell<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    TEST_UTIL.startMiniCluster(1);<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>    createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private static void createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    TEST_UTIL.createTable(name, families).put(createPuts(rows, families, qualifiers, cellValue));<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>  private static List&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      byte[] value) throws IOException {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      Put put = new Put(rows[row]);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          put.add(kv);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      puts.add(put);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    return puts;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @AfterClass<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public static void tearDownAfterClass() throws Exception {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    TEST_UTIL.shutdownMiniCluster();<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>  public static final class SparseFilter extends FilterBase {<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>    private final boolean reversed;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public SparseFilter(boolean reversed) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      this.reversed = reversed;<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>    @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      Threads.sleep(TIMEOUT / 2 + 100);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[reversed ? 0 : NUM_ROWS - 1])<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          ? ReturnCode.INCLUDE<a name="line.118"></a>
+<span class="sourceLineNo">119</span>          : ReturnCode.SKIP;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public byte[] toByteArray() throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      return reversed ? new byte[] { 1 } : new byte[] { 0 };<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    public static Filter parseFrom(final byte[] pbBytes) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      return new SparseFilter(pbBytes[0] != 0);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  protected Scan createScanWithSparseFilter() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return new Scan().setMaxResultSize(Long.MAX_VALUE).setCaching(Integer.MAX_VALUE)<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        .setNeedCursorResult(true).setAllowPartialResults(true).setFilter(new SparseFilter(false));<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>  protected Scan createReversedScanWithSparseFilter() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return new Scan().setMaxResultSize(Long.MAX_VALUE).setCaching(Integer.MAX_VALUE)<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        .setReversed(true).setNeedCursorResult(true).setAllowPartialResults(true)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        .setFilter(new SparseFilter(true));<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>  protected Scan createScanWithSizeLimit() {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    return new Scan().setMaxResultSize(1).setCaching(Integer.MAX_VALUE).setNeedCursorResult(true);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[08/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 29cc3e3..bc18a6a 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-info.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 fe8edf6..655d8e5 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-reports.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -128,7 +128,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 cb6bbe6..6d39d0c 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-summary.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 3d37b97..9b067e3 100644
--- a/hbase-archetypes/hbase-shaded-client-project/source-repository.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 d6e2896..e7685ac 100644
--- a/hbase-archetypes/hbase-shaded-client-project/team-list.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -523,7 +523,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/index.html b/hbase-archetypes/index.html
index 438b6dd..d44ab81 100644
--- a/hbase-archetypes/index.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -135,7 +135,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/integration.html b/hbase-archetypes/integration.html
index 2aa190d..0b6a346 100644
--- a/hbase-archetypes/integration.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/issue-tracking.html b/hbase-archetypes/issue-tracking.html
index 35bd431..b353585 100644
--- a/hbase-archetypes/issue-tracking.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/license.html b/hbase-archetypes/license.html
index a09bbf5..7820c8b 100644
--- a/hbase-archetypes/license.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/mail-lists.html b/hbase-archetypes/mail-lists.html
index 579b744..0ecedec 100644
--- a/hbase-archetypes/mail-lists.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/plugin-management.html b/hbase-archetypes/plugin-management.html
index a826b7f..3d0638b 100644
--- a/hbase-archetypes/plugin-management.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/plugins.html b/hbase-archetypes/plugins.html
index 2bd7069..416cb9f 100644
--- a/hbase-archetypes/plugins.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -210,7 +210,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/project-info.html b/hbase-archetypes/project-info.html
index 1e421e9..eb28d3a 100644
--- a/hbase-archetypes/project-info.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/project-summary.html b/hbase-archetypes/project-summary.html
index 62cee44..210f069 100644
--- a/hbase-archetypes/project-summary.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -163,7 +163,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/source-repository.html b/hbase-archetypes/source-repository.html
index e204285..f5213b0 100644
--- a/hbase-archetypes/source-repository.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/team-list.html b/hbase-archetypes/team-list.html
index 8ffcef6..9db4963 100644
--- a/hbase-archetypes/team-list.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -523,7 +523,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-spark/checkstyle.html b/hbase-spark/checkstyle.html
index 0b6aa0e..9162491 100644
--- a/hbase-spark/checkstyle.html
+++ b/hbase-spark/checkstyle.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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -412,7 +412,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependencies.html b/hbase-spark/dependencies.html
index 19dd7ff..cc024a5 100644
--- a/hbase-spark/dependencies.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -5740,7 +5740,7 @@ The following provides more details on the included cryptographic software:
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-convergence.html b/hbase-spark/dependency-convergence.html
index fa69b3c..4041bec 100644
--- a/hbase-spark/dependency-convergence.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -552,7 +552,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-info.html b/hbase-spark/dependency-info.html
index 3224ad2..6433f63 100644
--- a/hbase-spark/dependency-info.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-management.html b/hbase-spark/dependency-management.html
index 3799b4a..cb774a4 100644
--- a/hbase-spark/dependency-management.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-spark/index.html b/hbase-spark/index.html
index 5a7ba4c..63ac400 100644
--- a/hbase-spark/index.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -122,7 +122,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-spark/integration.html b/hbase-spark/integration.html
index 5ab92c2..3e7c5b3 100644
--- a/hbase-spark/integration.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-spark/issue-tracking.html b/hbase-spark/issue-tracking.html
index 2474041..5043449 100644
--- a/hbase-spark/issue-tracking.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/license.html
----------------------------------------------------------------------
diff --git a/hbase-spark/license.html b/hbase-spark/license.html
index 3c7bfed..f89c3b2 100644
--- a/hbase-spark/license.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-spark/mail-lists.html b/hbase-spark/mail-lists.html
index 4674a87..b4c30bc 100644
--- a/hbase-spark/mail-lists.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugin-management.html b/hbase-spark/plugin-management.html
index 8d001fd..e2e77c6 100644
--- a/hbase-spark/plugin-management.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugins.html b/hbase-spark/plugins.html
index cb351e9..5f27c7d 100644
--- a/hbase-spark/plugins.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -234,7 +234,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-info.html b/hbase-spark/project-info.html
index a25e3bb..c037fe2 100644
--- a/hbase-spark/project-info.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -170,7 +170,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-reports.html b/hbase-spark/project-reports.html
index e33dfcf..74cd67f 100644
--- a/hbase-spark/project-reports.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -131,7 +131,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-summary.html b/hbase-spark/project-summary.html
index a662e0a..b36ecc3 100644
--- a/hbase-spark/project-summary.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -169,7 +169,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-spark/source-repository.html b/hbase-spark/source-repository.html
index 2846f56..2daff67 100644
--- a/hbase-spark/source-repository.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-spark/team-list.html b/hbase-spark/team-list.html
index d731534..24f29dd 100644
--- a/hbase-spark/team-list.html
+++ b/hbase-spark/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -523,7 +523,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index d9e766d..4f1e5d9 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -438,7 +438,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index d2e37c5..349d128 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -296,7 +296,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index bc6a122..3a8e1e5 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -293,7 +293,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 08534ee..441eec3 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -281,209 +281,7 @@
 <h2><a name="Project_Licenses"></a>Project Licenses</h2><a name="Project_Licenses"></a>
 <div class="section">
 <h3><a name="Apache_License_Version_2.0"></a>Apache License, Version 2.0</h3><a name="Apache_License_Version_2.0"></a>
-<div class="source"><pre class="prettyprint">
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      &quot;License&quot; shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      &quot;Licensor&quot; shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      &quot;Legal Entity&quot; shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      &quot;control&quot; means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      &quot;Source&quot; form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      &quot;Object&quot; form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      &quot;Work&quot; shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      &quot;Derivative Works&quot; shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      &quot;Contribution&quot; shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, &quot;submitted&quot;
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as &quot;Not a Contribution.&quot;
-
-      &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a &quot;NOTICE&quot; text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same &quot;printed page&quot; as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-</pre></div></div></div>
+<p>Can't read the url [https://www.apache.org/licenses/LICENSE-2.0.txt] : Read timed out</p></div></div>
                   </div>
           </div>
 
@@ -496,7 +294,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 264d295..736a824 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -346,7 +346,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 05604c8..8cdc326 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -464,7 +464,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 2551705..6110674 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -419,7 +419,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 8bdcc7b..6fb41c3 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -441,7 +441,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 7d16233..c53fb90 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -380,7 +380,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 34ba3ed..f907c70 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -774,7 +774,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 4b5ccbd..a400f02 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 62e078a..ec2b309 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 4550e6f..676b227 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -336,7 +336,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index e92062f..970d0d9 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -313,7 +313,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 49e0edc..e884a24 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -308,7 +308,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 9a6c938..7dbbbb3 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -336,7 +336,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 3f54529..60b3f70 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -304,7 +304,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index eabf0d0..af27452 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -338,7 +338,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 16b380c..ac82bc2 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -525,7 +525,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index e044d8b..6e8f0da 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -693,7 +693,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index e1c766e..24dc1aa 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -22,6 +22,8 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">AbstractTestLogRolling</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRollPeriod.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">AbstractTestLogRollPeriod</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">AbstractTestProtobufLog</a></li>
+<li><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">AbstractTestScanCursor</a></li>
+<li><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">AbstractTestScanCursor.SparseFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/querymatcher/AbstractTestScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher" target="classFrame">AbstractTestScanQueryMatcher</a></li>
 <li><a href="org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">AbstractTestShell</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">AbstractTestWALReplay</a></li>
@@ -1499,6 +1501,7 @@
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestQuotaThrottle</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRandomRowFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestRandomRowFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestRateLimiter.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestRateLimiter</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncScanCursor</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncTableLimitedScanWithFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncTablePartialScan</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncTableScan</a></li>
@@ -1727,11 +1730,10 @@
 <li><a href="org/apache/hadoop/hbase/io/asyncfs/TestSaslFanOutOneBlockAsyncDFSOutput.html" title="class in org.apache.hadoop.hbase.io.asyncfs" target="classFrame">TestSaslFanOutOneBlockAsyncDFSOutput</a></li>
 <li><a href="org/apache/hadoop/hbase/security/TestSaslUtil.html" title="class in org.apache.hadoop.hbase.security" target="classFrame">TestSaslUtil</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestScan</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestScanCursor</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher" target="classFrame">TestScanDeleteTracker</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access" target="classFrame">TestScanEarlyTermination</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScanner</a></li>
-<li><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerCursor</a></li>
-<li><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerCursor.SparseFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">TestScannerFromBucketCache</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestScannerHeartbeatMessages.HeartbeatHRegion</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 946c8a36..ae47edc 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -22,6 +22,8 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestLogRolling</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRollPeriod.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestLogRollPeriod</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestProtobufLog</a></li>
+<li><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></li>
+<li><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/querymatcher/AbstractTestScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">AbstractTestScanQueryMatcher</a></li>
 <li><a href="org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client">AbstractTestShell</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestWALReplay</a></li>
@@ -1499,6 +1501,7 @@
 <li><a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaThrottle</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestRandomRowFilter.html" title="class in org.apache.hadoop.hbase.filter">TestRandomRowFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestRateLimiter.html" title="class in org.apache.hadoop.hbase.quotas">TestRateLimiter</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableLimitedScanWithFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTablePartialScan</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestRawAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableScan</a></li>
@@ -1727,11 +1730,10 @@
 <li><a href="org/apache/hadoop/hbase/io/asyncfs/TestSaslFanOutOneBlockAsyncDFSOutput.html" title="class in org.apache.hadoop.hbase.io.asyncfs">TestSaslFanOutOneBlockAsyncDFSOutput</a></li>
 <li><a href="org/apache/hadoop/hbase/security/TestSaslUtil.html" title="class in org.apache.hadoop.hbase.security">TestSaslUtil</a></li>
 <li><a href="org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client">TestScan</a></li>
+<li><a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">TestScanDeleteTracker</a></li>
 <li><a href="org/apache/hadoop/hbase/security/access/TestScanEarlyTermination.html" title="class in org.apache.hadoop.hbase.security.access">TestScanEarlyTermination</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanner</a></li>
-<li><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></li>
-<li><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor.SparseFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/TestScannerFromBucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TestScannerFromBucketCache</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.HeartbeatHRegion</a></li>


[23/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
index 9a8f45d..665ad9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
@@ -26,3462 +26,3459 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.net.BindException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.nio.ByteBuffer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Iterator;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.NavigableMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.TreeSet;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ConcurrentMap;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.LongAdder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.Path;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HConstants;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ServerName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.TableName;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Append;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Get;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Put;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Result;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.User;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.zookeeper.KeeperException;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<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> * Implements the regionserver RPC services.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>@InterfaceAudience.Private<a name="line.229"></a>
-<span class="sourceLineNo">230</span>@SuppressWarnings("deprecation")<a name="line.230"></a>
-<span class="sourceLineNo">231</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    ConfigurationObserver {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /** RPC scheduler to use for the region server. */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.259"></a>
+<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.InterruptedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.BindException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.net.InetSocketAddress;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.UnknownHostException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.ByteBuffer;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Arrays;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.NavigableMap;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.TreeSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.atomic.LongAdder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.commons.logging.Log;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.logging.LogFactory;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ServerName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Append;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Get;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Put;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Result;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.User;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.zookeeper.KeeperException;<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> * Implements the regionserver RPC services.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>@InterfaceAudience.Private<a name="line.226"></a>
+<span class="sourceLineNo">227</span>@SuppressWarnings("deprecation")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    ConfigurationObserver {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /** RPC scheduler to use for the region server. */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  final LongAdder requestCount = new LongAdder();<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  final LongAdder requestCount = new LongAdder();<a name="line.262"></a>
+<span class="sourceLineNo">261</span>  // Request counter for rpc get<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.262"></a>
 <span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  // Request counter for rpc get<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.265"></a>
+<span class="sourceLineNo">264</span>  // Request counter for rpc scan<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.265"></a>
 <span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  // Request counter for rpc scan<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.268"></a>
+<span class="sourceLineNo">267</span>  // Request counter for rpc multi<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Request counter for rpc multi<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.271"></a>
+<span class="sourceLineNo">270</span>  // Request counter for rpc mutate<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // Request counter for rpc mutate<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // Server to handle client requests.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  final RpcServerInterface rpcServer;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  final InetSocketAddress isa;<a name="line.278"></a>
+<span class="sourceLineNo">273</span>  // Server to handle client requests.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  final RpcServerInterface rpcServer;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  final InetSocketAddress isa;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private final HRegionServer regionServer;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private final long maxScannerResultSize;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private final HRegionServer regionServer;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private final long maxScannerResultSize;<a name="line.281"></a>
+<span class="sourceLineNo">280</span>  // The reference to the priority extraction function<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private final PriorityFunction priority;<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // The reference to the priority extraction function<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private final PriorityFunction priority;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private final long minimumScanTimeLimitDelta;<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>   * Row size threshold for multi requests above which a warning is logged<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private final int rowSizeWarnThreshold;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * An Rpc callback for closing a RegionScanner.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private final RegionScanner scanner;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.scanner = scanner;<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.scanner.close();<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><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    private final String scannerName;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final RegionScanner scanner;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final Lease lease;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.scannerName = scannerName;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.scanner = scanner;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.lease = lease;<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>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void run() throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      this.scanner.shipped();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (scanners.containsKey(scannerName)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lease != null) regionServer.leases.addLease(lease);<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * completion of multiGets.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public void addScanner(RegionScanner scanner) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.scanners.add(scanner);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    public void run() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (RegionScanner scanner : scanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        } catch (IOException e) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          LOG.error("Exception while closing the scanner " + scanner, e);<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>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static final class RegionScannerHolder {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final RegionScanner s;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    private final Region r;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    private final RpcCallback closeCallBack;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    private final RpcCallback shippedCallback;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    private byte[] rowOfLastPartialResult;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    private boolean needCursor;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public RegionScannerHolder(String scannerName, RegionScanner s, Region r,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.scannerName = scannerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.s = s;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      this.r = r;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      this.closeCallBack = closeCallBack;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      this.shippedCallback = shippedCallback;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.needCursor = needCursor;<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>    public long getNextCallSeq() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return nextCallSeq.get();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * closed<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private class ScannerListener implements LeaseListener {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    private final String scannerName;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    ScannerListener(final String n) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.scannerName = n;<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>    @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public void leaseExpired() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      if (rsh != null) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        RegionScanner s = rsh.s;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Region region = null;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        try {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            s.close();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } catch (IOException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), 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 {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<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>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                                                        final int index){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final ResultOrException.Builder builder, final int index) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return builder.setIndex(index).build();<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>   * Starts the nonce operation for a mutation, if needed.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutation Mutation.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param nonceGroup Nonce group from the request.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @returns whether to proceed this mutation.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    boolean canProceed = false;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (InterruptedException ex) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return canProceed;<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>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Ends nonce operation for a mutation, if needed.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param mutation Mutation.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      long nonceGroup, boolean success) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (result == null) return;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (clientCellBlockSupported) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      builder.setResult(pbr);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    builder.setStale(!isDefaultRegion);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (results.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (clientCellBlockSupported) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      for (Result res : results) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        builder.addCellsPerResult(res.size());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Result res : results) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        builder.addResults(pbr);<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>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Mutate a list of rows atomically.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   *<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param region<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param actions<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @throws IOException<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  private void mutateRows(final Region region,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.551"></a>
-<sp

<TRUNCATED>

[24/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
index cd6c8c8..380e362 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
@@ -38,195 +38,257 @@
 <span class="sourceLineNo">030</span>import org.apache.commons.collections.buffer.CircularFifoBuffer;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
 <span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>/**<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * Singleton which keeps track of tasks going on in this VM.<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * A Task here is anything which takes more than a few seconds<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * and the user might want to inquire about the status<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TaskMonitor {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TaskMonitor.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  // Don't keep around any tasks that have completed more than<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  // 60 seconds ago<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private static final long EXPIRATION_TIME = 60*1000;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  static final int MAX_TASKS = 1000;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  <a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static TaskMonitor instance;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private CircularFifoBuffer tasks = new CircularFifoBuffer(MAX_TASKS);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private List&lt;TaskAndWeakRefPair&gt; rpcTasks = Lists.newArrayList();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * Get singleton instance.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * TODO this would be better off scoped to a single daemon<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public static synchronized TaskMonitor get() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    if (instance == null) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      instance = new TaskMonitor();<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    return instance;<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>  public synchronized MonitoredTask createStatus(String description) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    MonitoredTask stat = new MonitoredTaskImpl();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    stat.setDescription(description);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        stat.getClass().getClassLoader(),<a name="line.73"></a>
-<span class="sourceLineNo">074</span>        new Class&lt;?&gt;[] { MonitoredTask.class },<a name="line.74"></a>
-<span class="sourceLineNo">075</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    if (tasks.isFull()) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      purgeExpiredTasks();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    tasks.add(pair);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    return proxy;<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>  public synchronized MonitoredRPCHandler createRPCStatus(String description) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    stat.setDescription(description);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance(<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        stat.getClass().getClassLoader(),<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        new Class&lt;?&gt;[] { MonitoredRPCHandler.class },<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    rpcTasks.add(pair);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return proxy;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private synchronized void purgeExpiredTasks() {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>         it.hasNext();) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      TaskAndWeakRefPair pair = it.next();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      MonitoredTask stat = pair.get();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      <a name="line.101"></a>
-<span class="sourceLineNo">102</span>      if (pair.isDead()) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        // The class who constructed this leaked it. So we can<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        // assume it's done.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        if (stat.getState() == MonitoredTaskImpl.State.RUNNING) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>          LOG.warn("Status " + stat + " appears to have been leaked");<a name="line.106"></a>
-<span class="sourceLineNo">107</span>          stat.cleanup();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      <a name="line.110"></a>
-<span class="sourceLineNo">111</span>      if (canPurge(stat)) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        it.remove();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Produces a list containing copies of the current state of all non-expired <a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * MonitoredTasks handled by this TaskMonitor.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @return A complete list of MonitoredTasks.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public synchronized List&lt;MonitoredTask&gt; getTasks() {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    purgeExpiredTasks();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    ArrayList&lt;MonitoredTask&gt; ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks.size());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>         it.hasNext();) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      TaskAndWeakRefPair pair = it.next();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      MonitoredTask t = pair.get();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      ret.add(t.clone());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>         it.hasNext();) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      TaskAndWeakRefPair pair = it.next();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      MonitoredTask t = pair.get();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      ret.add(t.clone());<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return ret;<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>  private boolean canPurge(MonitoredTask stat) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    long cts = stat.getCompletionTimestamp();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    return (cts &gt; 0 &amp;&amp; System.currentTimeMillis() - cts &gt; EXPIRATION_TIME);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  <a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void dumpAsText(PrintWriter out) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    long now = System.currentTimeMillis();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    <a name="line.148"></a>
-<span class="sourceLineNo">149</span>    List&lt;MonitoredTask&gt; tasks = getTasks();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    for (MonitoredTask task : tasks) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      out.println("Task: " + task.getDescription());<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      out.println("Status: " + task.getState() + ":" + task.getStatus());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      long running = (now - task.getStartTime())/1000;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      if (task.getCompletionTimestamp() != -1) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        long completed = (now - task.getCompletionTimestamp()) / 1000;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        out.println("Completed " + completed + "s ago");<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        out.println("Ran for " +<a name="line.157"></a>
-<span class="sourceLineNo">158</span>            (task.getCompletionTimestamp() - task.getStartTime())/1000<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            + "s");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      } else {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        out.println("Running for " + running + "s");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      out.println();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * This class encapsulates an object as well as a weak reference to a proxy<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * that passes through calls to that object. In art form:<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * &lt;pre&gt;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   *     Proxy  &lt;------------------<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   *       |                       \<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   *       v                        \<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * PassthroughInvocationHandler   |  weak reference<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   *       |                       /<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * MonitoredTaskImpl            / <a name="line.176"></a>
-<span class="sourceLineNo">177</span>   *       |                     /<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * StatAndWeakRefProxy  ------/<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * &lt;/pre&gt;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Since we only return the Proxy to the creator of the MonitorableStatus,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * this means that they can leak that object, and we'll detect it<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * since our weak reference will go null. But, we still have the actual<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * object, so we can log it and display it as a leaked (incomplete) action.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  private static class TaskAndWeakRefPair {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    private MonitoredTask impl;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    private WeakReference&lt;MonitoredTask&gt; weakProxy;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    <a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TaskAndWeakRefPair(MonitoredTask stat,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        MonitoredTask proxy) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.impl = stat;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.weakProxy = new WeakReference&lt;&gt;(proxy);<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>    public MonitoredTask get() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return impl;<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>    public boolean isDead() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return weakProxy.get() == null;<a name="line.200"></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.hbase.HBaseConfiguration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Singleton which keeps track of tasks going on in this VM.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * A Task here is anything which takes more than a few seconds<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * and the user might want to inquire about the status<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TaskMonitor {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(TaskMonitor.class);<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final String MAX_TASKS_KEY = "hbase.taskmonitor.max.tasks";<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final int DEFAULT_MAX_TASKS = 1000;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public static final String RPC_WARN_TIME_KEY = "hbase.taskmonitor.rpc.warn.time";<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public static final long DEFAULT_RPC_WARN_TIME = 0;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public static final String EXPIRATION_TIME_KEY = "hbase.taskmonitor.expiration.time";<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public static final long DEFAULT_EXPIRATION_TIME = 60*1000;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public static final String MONITOR_INTERVAL_KEY = "hbase.taskmonitor.monitor.interval";<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final long DEFAULT_MONITOR_INTERVAL = 10*1000;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static TaskMonitor instance;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private final int maxTasks;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final long rpcWarnTime;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private final long expirationTime;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final CircularFifoBuffer tasks;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final List&lt;TaskAndWeakRefPair&gt; rpcTasks;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final long monitorInterval;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private Thread monitorThread;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  TaskMonitor(Configuration conf) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    maxTasks = conf.getInt(MAX_TASKS_KEY, DEFAULT_MAX_TASKS);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    expirationTime = conf.getLong(EXPIRATION_TIME_KEY, DEFAULT_EXPIRATION_TIME);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    rpcWarnTime = conf.getLong(RPC_WARN_TIME_KEY, DEFAULT_RPC_WARN_TIME);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    tasks = new CircularFifoBuffer(maxTasks);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    rpcTasks = Lists.newArrayList();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    monitorInterval = conf.getLong(MONITOR_INTERVAL_KEY, DEFAULT_MONITOR_INTERVAL);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    monitorThread = new Thread(new MonitorRunnable());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    Threads.setDaemonThreadRunning(monitorThread, "Monitor thread for TaskMonitor");<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Get singleton instance.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * TODO this would be better off scoped to a single daemon<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static synchronized TaskMonitor get() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    if (instance == null) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      instance = new TaskMonitor(HBaseConfiguration.create());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    return instance;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  <a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public synchronized MonitoredTask createStatus(String description) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    MonitoredTask stat = new MonitoredTaskImpl();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    stat.setDescription(description);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        stat.getClass().getClassLoader(),<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        new Class&lt;?&gt;[] { MonitoredTask.class },<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    if (tasks.isFull()) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      purgeExpiredTasks();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    tasks.add(pair);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    return proxy;<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>  public synchronized MonitoredRPCHandler createRPCStatus(String description) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    stat.setDescription(description);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance(<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        stat.getClass().getClassLoader(),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        new Class&lt;?&gt;[] { MonitoredRPCHandler.class },<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    rpcTasks.add(pair);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return proxy;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private synchronized void warnStuckTasks() {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (rpcWarnTime &gt; 0) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          it.hasNext();) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        TaskAndWeakRefPair pair = it.next();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        MonitoredTask stat = pair.get();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        if ((stat.getState() == MonitoredTaskImpl.State.RUNNING) &amp;&amp;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            (now &gt;= stat.getWarnTime() + rpcWarnTime)) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          LOG.warn("Task may be stuck: " + stat);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>          stat.setWarnTime(now);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private synchronized void purgeExpiredTasks() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>         it.hasNext();) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      TaskAndWeakRefPair pair = it.next();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      MonitoredTask stat = pair.get();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      <a name="line.139"></a>
+<span class="sourceLineNo">140</span>      if (pair.isDead()) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        // The class who constructed this leaked it. So we can<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        // assume it's done.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        if (stat.getState() == MonitoredTaskImpl.State.RUNNING) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          LOG.warn("Status " + stat + " appears to have been leaked");<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          stat.cleanup();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      <a name="line.148"></a>
+<span class="sourceLineNo">149</span>      if (canPurge(stat)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        it.remove();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<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><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Produces a list containing copies of the current state of all non-expired <a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * MonitoredTasks handled by this TaskMonitor.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @return A complete list of MonitoredTasks.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public synchronized List&lt;MonitoredTask&gt; getTasks() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    purgeExpiredTasks();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;MonitoredTask&gt; ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks.size());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         it.hasNext();) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      TaskAndWeakRefPair pair = it.next();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      MonitoredTask t = pair.get();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      ret.add(t.clone());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>         it.hasNext();) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      TaskAndWeakRefPair pair = it.next();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      MonitoredTask t = pair.get();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      ret.add(t.clone());<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return ret;<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 boolean canPurge(MonitoredTask stat) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    long cts = stat.getCompletionTimestamp();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    return (cts &gt; 0 &amp;&amp; EnvironmentEdgeManager.currentTime() - cts &gt; expirationTime);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public void dumpAsText(PrintWriter out) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    <a name="line.185"></a>
+<span class="sourceLineNo">186</span>    List&lt;MonitoredTask&gt; tasks = getTasks();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (MonitoredTask task : tasks) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      out.println("Task: " + task.getDescription());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      out.println("Status: " + task.getState() + ":" + task.getStatus());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      long running = (now - task.getStartTime())/1000;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (task.getCompletionTimestamp() != -1) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        long completed = (now - task.getCompletionTimestamp()) / 1000;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        out.println("Completed " + completed + "s ago");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        out.println("Ran for " +<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            (task.getCompletionTimestamp() - task.getStartTime())/1000<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            + "s");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        out.println("Running for " + running + "s");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      out.println();<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>  <a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * An InvocationHandler that simply passes through calls to the original <a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * object.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  private static class PassthroughInvocationHandler&lt;T&gt; implements InvocationHandler {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private T delegatee;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    <a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public PassthroughInvocationHandler(T delegatee) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      this.delegatee = delegatee;<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>    public Object invoke(Object proxy, Method method, Object[] args)<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        throws Throwable {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return method.invoke(delegatee, args);<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>}<a name="line.221"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public synchronized void shutdown() {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    if (this.monitorThread != null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      monitorThread.interrupt();<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><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * This class encapsulates an object as well as a weak reference to a proxy<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * that passes through calls to that object. In art form:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * &lt;pre&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   *     Proxy  &lt;------------------<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   *       |                       \<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   *       v                        \<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * PassthroughInvocationHandler   |  weak reference<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   *       |                       /<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * MonitoredTaskImpl            / <a name="line.219"></a>
+<span class="sourceLineNo">220</span>   *       |                     /<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * StatAndWeakRefProxy  ------/<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;/pre&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * Since we only return the Proxy to the creator of the MonitorableStatus,<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * this means that they can leak that object, and we'll detect it<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * since our weak reference will go null. But, we still have the actual<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * object, so we can log it and display it as a leaked (incomplete) action.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  private static class TaskAndWeakRefPair {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    private MonitoredTask impl;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    private WeakReference&lt;MonitoredTask&gt; weakProxy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    <a name="line.231"></a>
+<span class="sourceLineNo">232</span>    public TaskAndWeakRefPair(MonitoredTask stat,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        MonitoredTask proxy) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      this.impl = stat;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      this.weakProxy = new WeakReference&lt;&gt;(proxy);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    <a name="line.237"></a>
+<span class="sourceLineNo">238</span>    public MonitoredTask get() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return impl;<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>    public boolean isDead() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      return weakProxy.get() == null;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  <a name="line.246"></a>
+<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * An InvocationHandler that simply passes through calls to the original <a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * object.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  private static class PassthroughInvocationHandler&lt;T&gt; implements InvocationHandler {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    private T delegatee;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    <a name="line.253"></a>
+<span class="sourceLineNo">254</span>    public PassthroughInvocationHandler(T delegatee) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      this.delegatee = delegatee;<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>    public Object invoke(Object proxy, Method method, Object[] args)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        throws Throwable {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return method.invoke(delegatee, args);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }    <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>  private class MonitorRunnable implements Runnable {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    private boolean running = true;<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>    public void run() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      while (running) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          Thread.sleep(monitorInterval);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          if (tasks.isFull()) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            purgeExpiredTasks();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          warnStuckTasks();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } catch (InterruptedException e) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          running = false;<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>}<a name="line.283"></a>
 
 
 


[06/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index c6999f8..4f7a6bb 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -563,293 +563,297 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestFromClientSideNoCodec.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractTestScanCursor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSizeFailures.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestFromClientSideNoCodec.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestSizeFailures.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSizeFailures.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableScanRenewLease.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableScanRenewLease.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCheckAndMutate.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestCheckAndMutate.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestFastFail.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFastFail.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestServerBusyException.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestServerBusyException.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSplitOrMergeStatus.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSnapshotWithAcl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotWithAcl.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncAdminBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncAdminBase.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestLeaseRenewal.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestLeaseRenewal.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTable.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncRegionLocatorTimeout.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncRegionLocatorTimeout.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultipleTimestamps.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncSingleRequestRpcRetryingCaller.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestResultFromCoprocessor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultFromCoprocessor.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHTableMultiplexerFlushCache.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultiRespectsLimits.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCloneSnapshotFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestCloneSnapshotFromClient.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestScannersFromClientSide2.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide2.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHTableMultiplexer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexer.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMetaWithReplicas.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaWithReplicas.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestScannersFromClientSide.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestBlockEvictionFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestFromClientSide3.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide3.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRawAsyncTablePartialScan.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMetaCache.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMetaCache.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestClientScannerRPCTimeout.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestClientScannerRPCTimeout.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSmallReversedScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSmallReversedScanner.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncAdminBuilder.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncAdminBuilder.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestPutWithDelete.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWithDelete.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestTimestampsFilter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestTimestampsFilter.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestFromClientSide.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestFromClientSide.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestResultSizeEstimation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultSizeEstimation.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAdmin2.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin2.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHCM.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestHCM.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestUpdateConfiguration.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestUpdateConfiguration.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestTableFavoredNodes.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestTableFavoredNodes.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableNoncedRetry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableNoncedRetry.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AbstractTestAsyncTableScan.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableBatch.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableBatch.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableGetMultiThreaded.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableGetMultiThreaded.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestScannerTimeout.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannerTimeout.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableScannerCloseWhileSuspending.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableScannerCloseWhileSuspending.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestIllegalTableDescriptor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestIllegalTableDescriptor.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestClientTimeouts.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestClientTimeouts.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestEnableTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestEnableTable.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestIncrementsFromClientSide.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestIncrementsFromClientSide.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAvoidCellReferencesIntoShippedBlocks.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestZKAsyncRegistry.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestZKAsyncRegistry.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncNonMetaRegionLocatorConcurrenyLimit.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocatorConcurrenyLimit.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestIntraRowPagination.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestIntraRowPagination.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncMetaRegionLocator.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncNonMetaRegionLocator.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAdmin1.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAdmin1.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRestoreSnapshotFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AbstractTestShell.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestConnectionImplementation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestConnectionImplementation.html#testUtil">testUtil</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestClientOperationInterrupt.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestClientOperationInterrupt.html#util">util</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMultiParallel.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiParallel.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSnapshotMetadata.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotMetadata.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestScanWithoutFetchingData.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScanWithoutFetchingData.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestShortCircuitConnection.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestShortCircuitConnection.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSnapshotFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotFromClient.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestTableSnapshotScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestTableSnapshotScanner.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMvccConsistentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestMvccConsistentScanner.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAlwaysSetScannerId.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAlwaysSetScannerId.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestLimitedScanWithFilter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestLimitedScanWithFilter.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRawAsyncTableLimitedScanWithFilter.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSnapshotCloneIndependence.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncTableScanMetrics.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncTableScanMetrics.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestClientPushback.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestClientPushback.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRpcControllerFactory.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAsyncAggregationClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestAsyncAggregationClient.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
@@ -2654,149 +2658,145 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestScannerCursor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHRegionOnCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionOnCluster.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestScannerWithBulkload.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestNewVersionBehaviorFromClientSide.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestNewVersionBehaviorFromClientSide.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCacheOnWriteInSchema.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRemoveRegionMetrics.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRemoveRegionMetrics.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestPerColumnFamilyFlush.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestEncryptionRandomKeying.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestEncryptionRandomKeying.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestBlocksRead.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestBlocksRead.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestStripeStoreFileManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRegionFavoredNodes.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCompactionPolicy.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCompactionPolicy.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHRegionFileSystem.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionFileSystem.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestWALMonotonicallyIncreasingSeqId.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestWALMonotonicallyIncreasingSeqId.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestStoreFileInfo.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestStoreFileInfo.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAtomicOperation.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMutateRowsRecovery.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMutateRowsRecovery.html#TESTING_UTIL">TESTING_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSplitTransactionOnCluster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html#TESTING_UTIL">TESTING_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">EncodedSeekPerformanceTest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/EncodedSeekPerformanceTest.html#testingUtility">testingUtility</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCompactionArchiveIOException.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCompactionArchiveIOException.html#testUtil">testUtil</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRegionServerAbort.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.html#testUtil">testUtil</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCompactionArchiveConcurrentClose.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCompactionArchiveConcurrentClose.html#testUtil">testUtil</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRegionServerReportForDuty.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.html#testUtil">testUtil</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSplitWalDataLoss.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSplitWalDataLoss.html#testUtil">testUtil</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestFSErrorsExposed.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.html#util">util</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestServerCustomProtocol.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestServerCustomProtocol.html#util">util</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCompactionInDeadRegionServer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCompactionInDeadRegionServer.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHRegionServerBulkLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCompaction.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCompaction.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestGetClosestAtOrBefore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSwitchToStreamRead.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestSwitchToStreamRead.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestCorruptedRegionStoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCorruptedRegionStoreFile.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHeapMemoryManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestHeapMemoryManager.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMajorCompaction.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMajorCompaction.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMinorCompaction.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMinorCompaction.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestScannerRetriableFailure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMobStoreCompaction.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMobStoreCompaction.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html
index d0c8f11..861234e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" target="_top">Frames</a></li>
@@ -778,7 +778,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html
new file mode 100644
index 0000000..add988c
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html
@@ -0,0 +1,391 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>AbstractTestScanCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="AbstractTestScanCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":9,"i2":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AbstractTestScanCursor.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/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.filter.Filter">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.client</div>
+<h2 title="Class AbstractTestScanCursor.SparseFilter" class="title">Class AbstractTestScanCursor.SparseFilter</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.filter.Filter</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.filter.FilterBase</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.client.AbstractTestScanCursor.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/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.106">AbstractTestScanCursor.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>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#reversed">reversed</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#SparseFilter-boolean-">SparseFilter</a></span>(boolean&nbsp;reversed)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.filter.Filter.ReturnCode</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#filterKeyValue-org.apache.hadoop.hbase.Cell-">filterKeyValue</a></span>(org.apache.hadoop.hbase.Cell&nbsp;v)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static org.apache.hadoop.hbase.filter.Filter</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#parseFrom-byte:A-">parseFrom</a></span>(byte[]&nbsp;pbBytes)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#toByteArray--">toByteArray</a></span>()</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, 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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="reversed">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>reversed</h4>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#line.108">reversed</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="SparseFilter-boolean-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>SparseFilter</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#line.110">SparseFilter</a>(boolean&nbsp;reversed)</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/client/AbstractTestScanCursor.SparseFilter.html#line.115">filterKeyValue</a>(org.apache.hadoop.hbase.Cell&nbsp;v)
+                                                                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>filterKeyValue</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.filter.Filter</code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="toByteArray--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toByteArray</h4>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#line.123">toByteArray</a>()
+                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>toByteArray</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.filter.FilterBase</code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="parseFrom-byte:A-">
+<!--   -->
+</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/client/AbstractTestScanCursor.SparseFilter.html#line.127">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>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AbstractTestScanCursor.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/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.filter.Filter">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[21/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
index 9a8f45d..665ad9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
@@ -26,3462 +26,3459 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.net.BindException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.nio.ByteBuffer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Iterator;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.NavigableMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.TreeSet;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ConcurrentMap;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.LongAdder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.Path;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HConstants;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ServerName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.TableName;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Append;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Get;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Put;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Result;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.User;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.zookeeper.KeeperException;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<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> * Implements the regionserver RPC services.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>@InterfaceAudience.Private<a name="line.229"></a>
-<span class="sourceLineNo">230</span>@SuppressWarnings("deprecation")<a name="line.230"></a>
-<span class="sourceLineNo">231</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    ConfigurationObserver {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /** RPC scheduler to use for the region server. */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.259"></a>
+<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.InterruptedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.BindException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.net.InetSocketAddress;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.UnknownHostException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.ByteBuffer;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Arrays;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.NavigableMap;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.TreeSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.atomic.LongAdder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.commons.logging.Log;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.logging.LogFactory;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ServerName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Append;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Get;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Put;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Result;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.User;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.zookeeper.KeeperException;<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> * Implements the regionserver RPC services.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>@InterfaceAudience.Private<a name="line.226"></a>
+<span class="sourceLineNo">227</span>@SuppressWarnings("deprecation")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    ConfigurationObserver {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /** RPC scheduler to use for the region server. */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  final LongAdder requestCount = new LongAdder();<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  final LongAdder requestCount = new LongAdder();<a name="line.262"></a>
+<span class="sourceLineNo">261</span>  // Request counter for rpc get<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.262"></a>
 <span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  // Request counter for rpc get<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.265"></a>
+<span class="sourceLineNo">264</span>  // Request counter for rpc scan<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.265"></a>
 <span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  // Request counter for rpc scan<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.268"></a>
+<span class="sourceLineNo">267</span>  // Request counter for rpc multi<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Request counter for rpc multi<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.271"></a>
+<span class="sourceLineNo">270</span>  // Request counter for rpc mutate<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // Request counter for rpc mutate<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // Server to handle client requests.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  final RpcServerInterface rpcServer;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  final InetSocketAddress isa;<a name="line.278"></a>
+<span class="sourceLineNo">273</span>  // Server to handle client requests.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  final RpcServerInterface rpcServer;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  final InetSocketAddress isa;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private final HRegionServer regionServer;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private final long maxScannerResultSize;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private final HRegionServer regionServer;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private final long maxScannerResultSize;<a name="line.281"></a>
+<span class="sourceLineNo">280</span>  // The reference to the priority extraction function<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private final PriorityFunction priority;<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // The reference to the priority extraction function<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private final PriorityFunction priority;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private final long minimumScanTimeLimitDelta;<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>   * Row size threshold for multi requests above which a warning is logged<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private final int rowSizeWarnThreshold;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * An Rpc callback for closing a RegionScanner.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private final RegionScanner scanner;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.scanner = scanner;<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.scanner.close();<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><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    private final String scannerName;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final RegionScanner scanner;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final Lease lease;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.scannerName = scannerName;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.scanner = scanner;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.lease = lease;<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>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void run() throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      this.scanner.shipped();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (scanners.containsKey(scannerName)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lease != null) regionServer.leases.addLease(lease);<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * completion of multiGets.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public void addScanner(RegionScanner scanner) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.scanners.add(scanner);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    public void run() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (RegionScanner scanner : scanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        } catch (IOException e) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          LOG.error("Exception while closing the scanner " + scanner, e);<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>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static final class RegionScannerHolder {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final RegionScanner s;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    private final Region r;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    private final RpcCallback closeCallBack;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    private final RpcCallback shippedCallback;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    private byte[] rowOfLastPartialResult;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    private boolean needCursor;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public RegionScannerHolder(String scannerName, RegionScanner s, Region r,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.scannerName = scannerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.s = s;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      this.r = r;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      this.closeCallBack = closeCallBack;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      this.shippedCallback = shippedCallback;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.needCursor = needCursor;<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>    public long getNextCallSeq() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return nextCallSeq.get();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * closed<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private class ScannerListener implements LeaseListener {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    private final String scannerName;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    ScannerListener(final String n) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.scannerName = n;<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>    @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public void leaseExpired() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      if (rsh != null) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        RegionScanner s = rsh.s;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Region region = null;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        try {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            s.close();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } catch (IOException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), 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 {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<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>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                                                        final int index){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final ResultOrException.Builder builder, final int index) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return builder.setIndex(index).build();<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>   * Starts the nonce operation for a mutation, if needed.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutation Mutation.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param nonceGroup Nonce group from the request.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @returns whether to proceed this mutation.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    boolean canProceed = false;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (InterruptedException ex) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return canProceed;<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>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Ends nonce operation for a mutation, if needed.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param mutation Mutation.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      long nonceGroup, boolean success) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (result == null) return;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (clientCellBlockSupported) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      builder.setResult(pbr);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    builder.setStale(!isDefaultRegion);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (results.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (clientCellBlockSupported) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      for (Result res : results) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        builder.addCellsPerResult(res.size());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Result res : results) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        builder.addResults(pbr);<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>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Mutate a list of rows atomically.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   *<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param region<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param actions<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @throws IOException<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  private void mutateRows(final Region region,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      regionServer.cacheFlusher.reclaimMemSt

<TRUNCATED>

[29/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
index c21aec6..0362d7f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
@@ -61,516 +61,530 @@
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.53"></a>
 <span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.54"></a>
 <span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Retry caller for scanning a region.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * &lt;p&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * reference of this object and use it to open new single region scanners.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final HashedWheelTimer retryTimer;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private final Scan scan;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ScanMetrics scanMetrics;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final long scannerId;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final ScanResultCache resultCache;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final RawScanResultConsumer consumer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final ClientService.Interface stub;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final HRegionLocation loc;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final boolean regionServerRemote;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final long pauseNs;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final int maxAttempts;<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final long scanTimeoutNs;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final long rpcTimeoutNs;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private final int startLogErrorsCnt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private final HBaseRpcController controller;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private byte[] nextStartRowWhenError;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private boolean includeNextStartRowWhenError;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private long nextCallStartNs;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private int tries;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private long nextCallSeq = -1L;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private enum ScanControllerState {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // usage. We use two things to prevent invalid usage:<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // to be used in the future.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // package private methods can only be called within the implementation of<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Make sure the methods are only called in this thread.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private final Thread callerThread = Thread.currentThread();<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // INITIALIZED -&gt; DESTROYED<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private ScanResumerImpl resumer;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    private void preCheck() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        "The current thread is %s, expected thread is %s, " +<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        Thread.currentThread(), callerThread);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        "Invalid Stopper state %s", state);<a name="line.163"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Retry caller for scanning a region.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * reference of this object and use it to open new single region scanners.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>@InterfaceAudience.Private<a name="line.71"></a>
+<span class="sourceLineNo">072</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final HashedWheelTimer retryTimer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final Scan scan;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final ScanMetrics scanMetrics;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final long scannerId;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final ScanResultCache resultCache;<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final RawScanResultConsumer consumer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ClientService.Interface stub;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final HRegionLocation loc;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final boolean regionServerRemote;<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private final long pauseNs;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final int maxAttempts;<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final long scanTimeoutNs;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private final long rpcTimeoutNs;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private final int startLogErrorsCnt;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private final HBaseRpcController controller;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  private byte[] nextStartRowWhenError;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private boolean includeNextStartRowWhenError;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private long nextCallStartNs;<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private int tries;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long nextCallSeq = -1L;<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private enum ScanControllerState {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // usage. We use two things to prevent invalid usage:<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // to be used in the future.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // package private methods can only be called within the implementation of<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // Make sure the methods are only called in this thread.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    private final Thread callerThread;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private final Optional&lt;Cursor&gt; cursor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // INITIALIZED -&gt; DESTROYED<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private ScanResumerImpl resumer;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    public ScanControllerImpl(ScanResponse resp) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      callerThread = Thread.currentThread();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      cursor = resp.hasCursor() ? Optional.of(ProtobufUtil.toCursor(resp.getCursor()))<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          : Optional.empty();<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    }<a name="line.164"></a>
 <span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    public ScanResumer suspend() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      preCheck();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      state = ScanControllerState.SUSPENDED;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      this.resumer = resumer;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return resumer;<a name="line.172"></a>
+<span class="sourceLineNo">166</span>    private void preCheck() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        "The current thread is %s, expected thread is %s, " +<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        Thread.currentThread(), callerThread);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        "Invalid Stopper state %s", state);<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>    @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public void terminate() {<a name="line.176"></a>
+<span class="sourceLineNo">176</span>    public ScanResumer suspend() {<a name="line.176"></a>
 <span class="sourceLineNo">177</span>      preCheck();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      state = ScanControllerState.TERMINATED;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // return the current state, and set the state to DESTROYED.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    ScanControllerState destroy() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      ScanControllerState state = this.state;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      this.state = ScanControllerState.DESTROYED;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      return state;<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>  private enum ScanResumerState {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  // controller.suspend().resume()<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // package private methods can only be called within the implementation of<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // INITIALIZED -&gt; RESUMED<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private ScanResponse resp;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int numberOfCompleteRows;<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // renewal task.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private Timeout leaseRenewer;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void resume() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ScanResponse localResp;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      int localNumberOfCompleteRows;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      synchronized (this) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          // user calls this method before we call prepare, so just set the state to<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          // RESUMED, the implementation will just go on.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          state = ScanResumerState.RESUMED;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          return;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        if (state == ScanResumerState.RESUMED) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          // already resumed, give up.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          return;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        state = ScanResumerState.RESUMED;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        if (leaseRenewer != null) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          leaseRenewer.cancel();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        localResp = this.resp;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      completeOrNext(localResp, localNumberOfCompleteRows);<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>    private void scheduleRenewLeaseTask() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      // the scan has already been resumed, give up<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (state == ScanResumerState.RESUMED) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        return;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      renewLease();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      scheduleRenewLeaseTask();<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>    // return false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // for more details.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      if (state == ScanResumerState.RESUMED) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return false;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      state = ScanResumerState.SUSPENDED;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.resp = resp;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // automatically so we do not need to renew lease.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      if (resp.getMoreResultsInRegion()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        // schedule renew lease task<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        scheduleRenewLeaseTask();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return true;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.retryTimer = retryTimer;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.scan = scan;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    this.scanMetrics = scanMetrics;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    this.scannerId = scannerId;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.resultCache = resultCache;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.consumer = consumer;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    this.stub = stub;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    this.loc = loc;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.pauseNs = pauseNs;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    this.maxAttempts = maxAttempts;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    if (scan.isReversed()) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    } else {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this.exceptions = new ArrayList&lt;&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private long elapsedMs() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<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 long remainingTimeNs() {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void closeScanner() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    resetController(controller, rpcTimeoutNs);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    stub.scan(controller, req, resp -&gt; {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      if (controller.failed()) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          controller.getFailed());<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">178</span>      state = ScanControllerState.SUSPENDED;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      this.resumer = resumer;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return resumer;<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>    @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    public void terminate() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      preCheck();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      state = ScanControllerState.TERMINATED;<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>    // return the current state, and set the state to DESTROYED.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    ScanControllerState destroy() {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      ScanControllerState state = this.state;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      this.state = ScanControllerState.DESTROYED;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      return state;<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>    public Optional&lt;Cursor&gt; cursor() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return cursor;<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>  private enum ScanResumerState {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  // controller.suspend().resume()<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  // package private methods can only be called within the implementation of<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // INITIALIZED -&gt; RESUMED<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private ScanResponse resp;<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private int numberOfCompleteRows;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // renewal task.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private Timeout leaseRenewer;<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    public void resume() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      ScanResponse localResp;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      int localNumberOfCompleteRows;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      synchronized (this) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          // user calls this method before we call prepare, so just set the state to<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          // RESUMED, the implementation will just go on.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          state = ScanResumerState.RESUMED;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (state == ScanResumerState.RESUMED) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // already resumed, give up.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          return;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        state = ScanResumerState.RESUMED;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (leaseRenewer != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          leaseRenewer.cancel();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        localResp = this.resp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      completeOrNext(localResp, localNumberOfCompleteRows);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    private void scheduleRenewLeaseTask() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      // the scan has already been resumed, give up<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      if (state == ScanResumerState.RESUMED) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      renewLease();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      scheduleRenewLeaseTask();<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 false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    // for more details.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      if (state == ScanResumerState.RESUMED) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        return false;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      state = ScanResumerState.SUSPENDED;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.resp = resp;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // automatically so we do not need to renew lease.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (resp.getMoreResultsInRegion()) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        // schedule renew lease task<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        scheduleRenewLeaseTask();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      }<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><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this.retryTimer = retryTimer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    this.scan = scan;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.scanMetrics = scanMetrics;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    this.scannerId = scannerId;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.resultCache = resultCache;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    this.consumer = consumer;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.stub = stub;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    this.loc = loc;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    this.pauseNs = pauseNs;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    this.maxAttempts = maxAttempts;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (scan.isReversed()) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } else {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    this.exceptions = new ArrayList&lt;&gt;();<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>  private long elapsedMs() {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private long remainingTimeNs() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void completeExceptionally(boolean closeScanner) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    resultCache.clear();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (closeScanner) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      closeScanner();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    future.complete(false);<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 void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    scan.withStartRow(row, inclusive);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    future.complete(true);<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>  private void completeWhenError(boolean closeScanner) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    resultCache.clear();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (closeScanner) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      closeScanner();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (nextStartRowWhenError != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    future.complete(true);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private void onError(Throwable error) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    error = translateException(error);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          " ms",<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        error);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    exceptions.add(qt);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (tries &gt;= maxAttempts) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      completeExceptionally(!scannerClosed);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long delayNs;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    if (scanTimeoutNs &gt; 0) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      if (maxDelayNs &lt;= 0) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        completeExceptionally(!scannerClosed);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        return;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (scannerClosed) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      completeWhenError(false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      completeWhenError(true);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    if (error instanceof DoNotRetryIOException) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      completeExceptionally(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    tries++;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<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 void updateNextStartRowWhenError(Result result) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    nextStartRowWhenError = result.getRow();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    includeNextStartRowWhenError = result.mayHaveMoreCellsInRow();<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>  private void completeWhenNoMoreResultsInRegion() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    if (noMoreResultsForScan(scan, loc.getRegionInfo())) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      completeNoMoreResults();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      completeWithNextStartRow(loc.getRegionInfo().getEndKey(), true);<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>  private void completeReversedWhenNoMoreResultsInRegion() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (noMoreResultsForReverseScan(scan, loc.getRegionInfo())) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      completeNoMoreResults();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      completeWithNextStartRow(loc.getRegionInfo().getStartKey(), false);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private void completeOrNext(ScanResponse resp, int numberOfCompleteRows) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    if (resp.hasMoreResults() &amp;&amp; !resp.getMoreResults()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      // RS tells us there is no more data for the whole scan<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      completeNoMoreResults();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      return;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (scan.getLimit() &gt; 0) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // The RS should have set the moreResults field in ScanResponse to false when we have reached<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // the limit, so we add an assert here.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      int newLimit = scan.getLimit() - numberOfCompleteRows;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      assert newLimit &gt; 0;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      scan.setLimit(newLimit);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // as in 2.0 this value will always be set<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (!resp.getMoreResultsInRegion()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      completeWhenNoMoreResultsInRegion.run();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    next();<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>  private void onComplete(HBaseRpcController controller, ScanResponse resp) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (controller.failed()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      onError(controller.getFailed());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    updateServerSideMetrics(scanMetrics, resp);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    boolean isHeartbeatMessage = resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Result[] results;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    int numberOfCompleteRowsBefore = resultCache.numberOfCompleteRows();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    try {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      Result[] rawResults = ResponseConverter.getResults(controller.cellScanner(), resp);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      updateResultsMetrics(scanMetrics, rawResults, isHeartbeatMessage);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      results = resultCache.addAndGet(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        Optional.ofNullable(rawResults).orElse(ScanResultCache.EMPTY_RESULT_ARRAY),<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        isHeartbeatMessage);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } catch (IOException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // We can not retry here. The server has responded normally and the call sequence has been<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // increased so a new scan with the same call sequence will cause an<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // OutOfOrderScannerNextException. Let the upper layer open a new scanner.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      LOG.warn("decode scan response failed", e);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      completeWhenError(true);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ScanControllerImpl scanController = new ScanControllerImpl();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    if (results.length &gt; 0) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      updateNextStartRowWhenError(results[results.length - 1]);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      consumer.onNext(results, scanController);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    } else if (resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      consumer.onHeartbeat(scanController);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    ScanControllerState state = scanController.destroy();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (state == ScanControllerState.TERMINATED) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      if (resp.getMoreResultsInRegion()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // we have more results in region but user request to stop the scan, so we need to close the<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // scanner explicitly.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        closeScanner();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      completeNoMoreResults();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      return;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    int numberOfCompleteRows = resultCache.numberOfCompleteRows() - numberOfCompleteRowsBefore;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (state == ScanControllerState.SUSPENDED) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (scanController.resumer.prepare(resp, numberOfCompleteRows)) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        return;<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>    completeOrNext(resp, numberOfCompleteRows);<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>  private void call() {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // As we have a call sequence for scan, it is useless to have a different rpc timeout which is<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // less than the scan timeout. If the server does not respond in time(usually this will not<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // happen as we have heartbeat now), we will get an OutOfOrderScannerNextException when<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // resending the next request and the only way to fix this is to close the scanner and open a<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // new one.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    long callTimeoutNs;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    if (scanTimeoutNs &gt; 0) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      long remainingNs = scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      if (remainingNs &lt;= 0) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        completeExceptionally(true);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        return;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      callTimeoutNs = remainingNs;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    } else {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      callTimeoutNs = 0L;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (tries &gt; 1) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      incRPCRetriesMetrics(scanMetrics, regionServerRemote);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    resetController(controller, callTimeoutNs);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    ScanRequest req = RequestConverter.buildScanRequest(scannerId, scan.getCaching(), false,<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      nextCallSeq, false, false, scan.getLimit());<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    stub.scan(controller, req, resp -&gt; onComplete(controller, resp));<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>  private void next() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    nextCallSeq++;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    tries = 1;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    exceptions.clear();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    nextCallStartNs = System.nanoTime();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    call();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  private void renewLease() {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    nextCallSeq++;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    resetController(controller, rpcTimeoutNs);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    ScanRequest req =<a name="line.547"></a>
-<span class="sourceLineNo">548</span>        RequestConverter.buildScanRequest(scannerId, 0, false, nextCallSeq, false, true, -1);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    stub.scan(controller, req, resp -&gt; {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    });<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Now we will also fetch some cells along with the scanner id when opening a scanner, so we also<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * need to process the ScanResponse for the open scanner request. The HBaseRpcController for the<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * open scanner request is also needed because we may have some data in the CellScanner which is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * contained in the controller.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @return {@code true} if we should continue, otherwise {@code false}.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public CompletableFuture&lt;Boolean&gt; start(HBaseRpcController controller,<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      ScanResponse respWhenOpen) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    onComplete(controller, respWhenOpen);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    return future;<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">340</span>  private void closeScanner() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    resetController(controller, rpcTimeoutNs);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    stub.scan(controller, req, resp -&gt; {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (controller.failed()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          controller.getFailed());<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>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  private void completeExceptionally(boolean closeScanner) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    resultCache.clear();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (closeScanner) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      closeScanner();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    future.complete(false);<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>  private void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    scan.withStartRow(row, inclusive);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    future.complete(true);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private void completeWhenError(boolean closeScanner) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    resultCache.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (closeScanner) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      closeScanner();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    if (nextStartRowWhenError != null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    future.complete(true);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private void onError(Throwable error) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    error = translateException(error);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          " ms",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        error);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    exceptions.add(qt);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (tries &gt;= maxAttempts) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      completeExceptionally(!scannerClosed);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      return;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    long delayNs;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (scanTimeoutNs &gt; 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (maxDelayNs &lt;= 0) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        completeExceptionally(!scannerClosed);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        return;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    } else {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (scannerClosed) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      completeWhenError(false);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      completeWhenError(true);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    if (error instanceof DoNotRetryIOException) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      completeExceptionally(true);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    tries++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private void updateNextStartRowWhenError(Result result) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    nextStartRowWhenError = result.getRow();<a name="line.431"></a>
+<span

<TRUNCATED>

[36/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
index 1a1d254..7925179 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedMobStoreScanner.html
@@ -193,7 +193,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReversedSto
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PA
 RALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PREAD_MAX_BYTES">STORESCANNER_PREAD_MAX_BYTES</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#prevCell">prevCell</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">st
 ore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PREAD_MAX_BYTES">STORESCANNER_PREAD_MAX_BYTES</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
index 3e0b045..c2a7626 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.html
@@ -170,7 +170,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PA
 RALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PREAD_MAX_BYTES">STORESCANNER_PREAD_MAX_BYTES</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#prevCell">prevCell</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">st
 ore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PREAD_MAX_BYTES">STORESCANNER_PREAD_MAX_BYTES</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
index 459619b..282ae22 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.373">ScannerContext.Builder</a>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.371">ScannerContext.Builder</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -238,7 +238,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>keepProgress</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.374">keepProgress</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.372">keepProgress</a></pre>
 </li>
 </ul>
 <a name="trackMetrics">
@@ -247,7 +247,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trackMetrics</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.375">trackMetrics</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.373">trackMetrics</a></pre>
 </li>
 </ul>
 <a name="limits">
@@ -256,7 +256,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>limits</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.376">limits</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.374">limits</a></pre>
 </li>
 </ul>
 </li>
@@ -273,7 +273,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.378">Builder</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.376">Builder</a>()</pre>
 </li>
 </ul>
 <a name="Builder-boolean-">
@@ -282,7 +282,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Builder</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.381">Builder</a>(boolean&nbsp;keepProgress)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.379">Builder</a>(boolean&nbsp;keepProgress)</pre>
 </li>
 </ul>
 </li>
@@ -299,7 +299,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setKeepProgress</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.385">setKeepProgress</a>(boolean&nbsp;keepProgress)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.383">setKeepProgress</a>(boolean&nbsp;keepProgress)</pre>
 </li>
 </ul>
 <a name="setTrackMetrics-boolean-">
@@ -308,7 +308,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setTrackMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.390">setTrackMetrics</a>(boolean&nbsp;trackMetrics)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.388">setTrackMetrics</a>(boolean&nbsp;trackMetrics)</pre>
 </li>
 </ul>
 <a name="setSizeLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-long-long-">
@@ -317,7 +317,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setSizeLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.395">setSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;sizeScope,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.393">setSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;sizeScope,
                                            long&nbsp;dataSizeLimit,
                                            long&nbsp;heapSizeLimit)</pre>
 </li>
@@ -328,7 +328,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.402">setTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;timeScope,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.400">setTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;timeScope,
                                            long&nbsp;timeLimit)</pre>
 </li>
 </ul>
@@ -338,7 +338,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setBatchLimit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.408">setBatchLimit</a>(int&nbsp;batchLimit)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.406">setBatchLimit</a>(int&nbsp;batchLimit)</pre>
 </li>
 </ul>
 <a name="build--">
@@ -347,7 +347,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.413">build</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html#line.411">build</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
index b86d99f..ef3350a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.522">ScannerContext.LimitFields</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.520">ScannerContext.LimitFields</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">The different fields that can be used as limits in calls to
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(java.util.List)</code></a> and <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(java.util.List)</code></a></div>
@@ -332,7 +332,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_BATCH</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.527">DEFAULT_BATCH</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.525">DEFAULT_BATCH</a></pre>
 <div class="block">Default values of the limit fields. Defined such that if a field does NOT change from its
  default, it will not be enforced</div>
 </li>
@@ -343,7 +343,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SIZE</h4>
-<pre>private static&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.528">DEFAULT_SIZE</a></pre>
+<pre>private static&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.526">DEFAULT_SIZE</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_TIME">
@@ -352,7 +352,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_TIME</h4>
-<pre>private static&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.529">DEFAULT_TIME</a></pre>
+<pre>private static&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.527">DEFAULT_TIME</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_SCOPE">
@@ -361,7 +361,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SCOPE</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.534">DEFAULT_SCOPE</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.532">DEFAULT_SCOPE</a></pre>
 <div class="block">Default scope that is assigned to a limit if a scope is not specified.</div>
 </li>
 </ul>
@@ -371,7 +371,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>batch</h4>
-<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.538">batch</a></pre>
+<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.536">batch</a></pre>
 </li>
 </ul>
 <a name="sizeScope">
@@ -380,7 +380,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sizeScope</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.540">sizeScope</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.538">sizeScope</a></pre>
 </li>
 </ul>
 <a name="dataSize">
@@ -389,7 +389,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>dataSize</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.542">dataSize</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.540">dataSize</a></pre>
 </li>
 </ul>
 <a name="heapSize">
@@ -398,7 +398,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.545">heapSize</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.543">heapSize</a></pre>
 </li>
 </ul>
 <a name="timeScope">
@@ -407,7 +407,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>timeScope</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.547">timeScope</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.545">timeScope</a></pre>
 </li>
 </ul>
 <a name="time">
@@ -416,7 +416,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>time</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.548">time</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.546">time</a></pre>
 </li>
 </ul>
 </li>
@@ -433,7 +433,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LimitFields</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.553">LimitFields</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.551">LimitFields</a>()</pre>
 <div class="block">Fields keep their default values.</div>
 </li>
 </ul>
@@ -443,7 +443,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LimitFields</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.556">LimitFields</a>(int&nbsp;batch,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.554">LimitFields</a>(int&nbsp;batch,
             <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;sizeScope,
             long&nbsp;size,
             long&nbsp;heapSize,
@@ -465,7 +465,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>copy</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.561">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a>&nbsp;limitsToCopy)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.559">copy</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a>&nbsp;limitsToCopy)</pre>
 </li>
 </ul>
 <a name="setFields-int-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-long-long-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-long-">
@@ -474,7 +474,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setFields</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.574">setFields</a>(int&nbsp;batch,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.572">setFields</a>(int&nbsp;batch,
                <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;sizeScope,
                long&nbsp;dataSize,
                long&nbsp;heapSize,
@@ -495,7 +495,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatch</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.584">getBatch</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.582">getBatch</a>()</pre>
 </li>
 </ul>
 <a name="setBatch-int-">
@@ -504,7 +504,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setBatch</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.588">setBatch</a>(int&nbsp;batch)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.586">setBatch</a>(int&nbsp;batch)</pre>
 </li>
 </ul>
 <a name="canEnforceBatchLimitFromScope-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">
@@ -513,7 +513,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>canEnforceBatchLimitFromScope</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.596">canEnforceBatchLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.594">canEnforceBatchLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - </dd>
@@ -528,7 +528,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.600">getDataSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.598">getDataSize</a>()</pre>
 </li>
 </ul>
 <a name="getHeapSize--">
@@ -537,7 +537,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeapSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.604">getHeapSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.602">getHeapSize</a>()</pre>
 </li>
 </ul>
 <a name="setDataSize-long-">
@@ -546,7 +546,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setDataSize</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.608">setDataSize</a>(long&nbsp;dataSize)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.606">setDataSize</a>(long&nbsp;dataSize)</pre>
 </li>
 </ul>
 <a name="setHeapSize-long-">
@@ -555,7 +555,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setHeapSize</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.612">setHeapSize</a>(long&nbsp;heapSize)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.610">setHeapSize</a>(long&nbsp;heapSize)</pre>
 </li>
 </ul>
 <a name="getSizeScope--">
@@ -564,7 +564,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getSizeScope</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.619">getSizeScope</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.617">getSizeScope</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><code>ScannerContext.LimitScope</code></a> indicating scope in which the size limit is enforced</dd>
@@ -577,7 +577,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setSizeScope</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.626">setSizeScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.624">setSizeScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
 <div class="block">Change the scope in which the size limit is enforced</div>
 </li>
 </ul>
@@ -587,7 +587,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>canEnforceSizeLimitFromScope</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.634">canEnforceSizeLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.632">canEnforceSizeLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - </dd>
@@ -602,7 +602,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.638">getTime</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.636">getTime</a>()</pre>
 </li>
 </ul>
 <a name="setTime-long-">
@@ -611,7 +611,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setTime</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.642">setTime</a>(long&nbsp;time)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.640">setTime</a>(long&nbsp;time)</pre>
 </li>
 </ul>
 <a name="getTimeScope--">
@@ -620,7 +620,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeScope</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.649">getTimeScope</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.647">getTimeScope</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><code>ScannerContext.LimitScope</code></a> indicating scope in which the time limit is enforced</dd>
@@ -633,7 +633,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeScope</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.656">setTimeScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.654">setTimeScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
 <div class="block">Change the scope in which the time limit is enforced</div>
 </li>
 </ul>
@@ -643,7 +643,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>canEnforceTimeLimitFromScope</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.664">canEnforceTimeLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.662">canEnforceTimeLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - </dd>
@@ -658,7 +658,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.669">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html#line.667">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
index 4bad19a..1c04441 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.476">ScannerContext.LimitScope</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.474">ScannerContext.LimitScope</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&gt;</pre>
 <div class="block">The various scopes where a limit can be enforced. Used to differentiate when a limit should be
  enforced or not.</div>
@@ -247,7 +247,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>BETWEEN_ROWS</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.481">BETWEEN_ROWS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.479">BETWEEN_ROWS</a></pre>
 <div class="block">Enforcing a limit between rows means that the limit will not be considered until all the
  cells for a particular row have been retrieved</div>
 </li>
@@ -258,7 +258,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BETWEEN_CELLS</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.487">BETWEEN_CELLS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.485">BETWEEN_CELLS</a></pre>
 <div class="block">Enforcing a limit between cells means that the limit will be considered after each full cell
  has been retrieved</div>
 </li>
@@ -277,7 +277,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>depth</h4>
-<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.497">depth</a></pre>
+<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.495">depth</a></pre>
 <div class="block">When enforcing a limit, we must check that the scope is appropriate for enforcement.
  <p>
  To communicate this concept, each scope has a depth. A limit will be enforced if the depth of
@@ -300,7 +300,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/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.49">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.47">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:
@@ -320,7 +320,7 @@ for (ScannerContext.LimitScope c : ScannerContext.LimitScope.values())
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.49">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.47">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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 
@@ -342,7 +342,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>depth</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.503">depth</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.501">depth</a>()</pre>
 </li>
 </ul>
 <a name="canEnforceLimitFromScope-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">
@@ -351,7 +351,7 @@ not permitted.)</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>canEnforceLimitFromScope</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.513">canEnforceLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html#line.511">canEnforceLimitFromScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - The scope in which the limit is being checked</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
index 8118a30..c31be08 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.421">ScannerContext.NextState</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.419">ScannerContext.NextState</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&gt;</pre>
 <div class="block">The possible states a scanner may be in following a call to <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(List)</code></a></div>
 </li>
@@ -271,7 +271,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>MORE_VALUES</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.422">MORE_VALUES</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.420">MORE_VALUES</a></pre>
 </li>
 </ul>
 <a name="NO_MORE_VALUES">
@@ -280,7 +280,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_MORE_VALUES</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.423">NO_MORE_VALUES</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.421">NO_MORE_VALUES</a></pre>
 </li>
 </ul>
 <a name="SIZE_LIMIT_REACHED">
@@ -289,7 +289,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SIZE_LIMIT_REACHED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.424">SIZE_LIMIT_REACHED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.422">SIZE_LIMIT_REACHED</a></pre>
 </li>
 </ul>
 <a name="SIZE_LIMIT_REACHED_MID_ROW">
@@ -298,7 +298,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SIZE_LIMIT_REACHED_MID_ROW</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.430">SIZE_LIMIT_REACHED_MID_ROW</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.428">SIZE_LIMIT_REACHED_MID_ROW</a></pre>
 <div class="block">Special case of size limit reached to indicate that the size limit was reached in the middle
  of a row and thus a partial results was formed</div>
 </li>
@@ -309,7 +309,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>TIME_LIMIT_REACHED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.431">TIME_LIMIT_REACHED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.429">TIME_LIMIT_REACHED</a></pre>
 </li>
 </ul>
 <a name="TIME_LIMIT_REACHED_MID_ROW">
@@ -318,7 +318,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>TIME_LIMIT_REACHED_MID_ROW</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.437">TIME_LIMIT_REACHED_MID_ROW</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.435">TIME_LIMIT_REACHED_MID_ROW</a></pre>
 <div class="block">Special case of time limit reached to indicate that the time limit was reached in the middle
  of a row and thus a partial results was formed</div>
 </li>
@@ -329,7 +329,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BATCH_LIMIT_REACHED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.438">BATCH_LIMIT_REACHED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.436">BATCH_LIMIT_REACHED</a></pre>
 </li>
 </ul>
 </li>
@@ -346,7 +346,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>moreValues</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.440">moreValues</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.438">moreValues</a></pre>
 </li>
 </ul>
 <a name="limitReached">
@@ -355,7 +355,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>limitReached</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.441">limitReached</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.439">limitReached</a></pre>
 </li>
 </ul>
 </li>
@@ -372,7 +372,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/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.49">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.47">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:
@@ -392,7 +392,7 @@ for (ScannerContext.NextState c : ScannerContext.NextState.values())
 <ul class="blockList">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.49">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.47">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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 
@@ -414,7 +414,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>hasMoreValues</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.452">hasMoreValues</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.450">hasMoreValues</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the state indicates that more values may follow those that have been
@@ -428,7 +428,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>limitReached</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.459">limitReached</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.457">limitReached</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when the state indicates that a limit has been reached and scan should stop</dd>
@@ -441,7 +441,7 @@ not permitted.)</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>isValidState</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.463">isValidState</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;state)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.461">isValidState</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;state)</pre>
 </li>
 </ul>
 <a name="hasMoreValues-org.apache.hadoop.hbase.regionserver.ScannerContext.NextState-">
@@ -450,7 +450,7 @@ not permitted.)</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hasMoreValues</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.467">hasMoreValues</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;state)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html#line.465">hasMoreValues</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;state)</pre>
 </li>
 </ul>
 </li>


[14/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
index 87e1c5b..98776b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html
@@ -27,680 +27,678 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.commons.logging.Log;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.commons.logging.LogFactory;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Cell;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * &lt;p&gt;<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * reached<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * &lt;p&gt;<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.50"></a>
-<span class="sourceLineNo">051</span> */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceStability.Evolving<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public class ScannerContext {<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  LimitFields limits;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  LimitFields progress;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  NextState scannerState;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * has been made towards the limits so far.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * &lt;p&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * &lt;p&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * For example: &lt;pre&gt; {@code<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * RegionScanner scanner = ...<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * while(scanner.next(results, context)) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   *   // Do something with a batch of 5 cells<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * saved and considered in future invocations<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  boolean keepProgress;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.98"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.Cell;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * &lt;p&gt;<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * reached<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;p&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * &lt;p&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> */<a name="line.49"></a>
+<span class="sourceLineNo">050</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceStability.Evolving<a name="line.51"></a>
+<span class="sourceLineNo">052</span>public class ScannerContext {<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  LimitFields limits;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  LimitFields progress;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  NextState scannerState;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * has been made towards the limits so far.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * &lt;p&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * &lt;p&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * For example: &lt;pre&gt; {@code<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * RegionScanner scanner = ...<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * while(scanner.next(results, context)) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   *   // Do something with a batch of 5 cells<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * saved and considered in future invocations<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  boolean keepProgress;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private Cell lastPeekedCell = null;<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private Cell peekedCellInHeartbeat = null;<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>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  final ServerSideScanMetrics metrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.limits = new LimitFields();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // Progress fields are initialized to 0<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.keepProgress = keepProgress;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.scannerState = DEFAULT_STATE;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<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>  boolean isTrackingMetrics() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return this.metrics != null;<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>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  ServerSideScanMetrics getMetrics() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assert isTrackingMetrics();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return this.metrics;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  boolean getKeepProgress() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this.keepProgress = keepProgress;<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>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  void incrementBatchProgress(int batch) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    int currentBatch = progress.getBatch();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    progress.setBatch(currentBatch + batch);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    long curDataSize = progress.getDataSize();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    long curHeapSize = progress.getHeapSize();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    progress.setHeapSize(curHeapSize + heapSize);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  void updateTimeProgress() {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    progress.setTime(System.currentTimeMillis());<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>  int getBatchProgress() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return progress.getBatch();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  long getDataSizeProgress() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return progress.getHeapSize();<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>  long getTimeProgress() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    setBatchProgress(batchProgress);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    progress.setDataSize(dataSizeProgress);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    progress.setTime(timeProgress);<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * values<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  void clearProgress() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param state<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return The state that was passed in.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  NextState setScannerState(NextState state) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (!NextState.isValidState(state)) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    return state;<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>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   *         a limit in the middle of a row<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  boolean mayHaveMoreCellsInRow() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<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>   * @param checkerScope<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param checkerScope<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>  /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param checkerScope<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<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>   * @param checkerScope<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>  /**<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param scope The scope in which the size limit will be enforced<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    limits.setTimeScope(scope);<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>  int getBatchLimit() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return limits.getBatch();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  long getDataSizeLimit() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return limits.getDataSize();<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>  long getTimeLimit() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return limits.getTime();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  boolean checkBatchLimit(LimitScope checkerScope) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return hasBatchLimit(checkerScope) &amp;&amp; progress.getBatch() &gt;= limits.getBatch();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  boolean checkSizeLimit(LimitScope checkerScope) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return hasSizeLimit(checkerScope) &amp;&amp; (progress.getDataSize() &gt;= limits.getDataSize()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        || progress.getHeapSize() &gt;= limits.getHeapSize());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<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>   * @param checkerScope The scope that the limit is being checked from. The time limit is always<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *          checked against {@link System#currentTimeMillis()}<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  boolean checkTimeLimit(LimitScope checkerScope) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return hasTimeLimit(checkerScope) &amp;&amp; progress.getTime() &gt;= limits.getTime();<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>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param checkerScope The scope that the limits are being checked from<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return true when some limit is enforceable from the checker's scope and it has been reached<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  boolean checkAnyLimitReached(LimitScope checkerScope) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return checkSizeLimit(checkerScope) || checkBatchLimit(checkerScope)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        || checkTimeLimit(checkerScope);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Cell getPeekedCellInHeartbeat() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return peekedCellInHeartbeat;<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>  public void setPeekedCellInHeartbeat(Cell peekedCellInHeartbeat) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    this.peekedCellInHeartbeat = peekedCellInHeartbeat;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public String toString() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    StringBuilder sb = new StringBuilder();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    sb.append("{");<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    sb.append("limits:");<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    sb.append(limits);<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    sb.append(", progress:");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    sb.append(progress);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>    sb.append(", keepProgress:");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    sb.append(keepProgress);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append(", state:");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append(scannerState);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("}");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    return sb.toString();<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>  public static Builder newBuilder() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return new Builder();<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 static Builder newBuilder(boolean keepProgress) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return new Builder(keepProgress);<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 static final class Builder {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean keepProgress = DEFAULT_KEEP_PROGRESS;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    boolean trackMetrics = false;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    LimitFields limits = new LimitFields();<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private Builder() {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private Builder(boolean keepProgress) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.keepProgress = keepProgress;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public Builder setKeepProgress(boolean keepProgress) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.keepProgress = keepProgress;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return this;<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>    public Builder setTrackMetrics(boolean trackMetrics) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.trackMetrics = trackMetrics;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return this;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public Builder setSizeLimit(LimitScope sizeScope, long dataSizeLimit, long heapSizeLimit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      limits.setDataSize(dataSizeLimit);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      limits.setHeapSize(heapSizeLimit);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      limits.setSizeScope(sizeScope);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return this;<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 Builder setTimeLimit(LimitScope timeScope, long timeLimit) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      limits.setTime(timeLimit);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      limits.setTimeScope(timeScope);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return this;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public Builder setBatchLimit(int batchLimit) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      limits.setBatch(batchLimit);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return this;<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>    public ScannerContext build() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      return new ScannerContext(keepProgress, limits, trackMetrics);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * The possible states a scanner may be in following a call to {@link InternalScanner#next(List)}<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public enum NextState {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    MORE_VALUES(true, false),<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    NO_MORE_VALUES(false, false),<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    SIZE_LIMIT_REACHED(true, true),<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>     * Special case of size limit reached to indicate that the size limit was reached in the middle<a name="line.427"></a>
-<span class="sourceLineNo">428</span>     * of a row and thus a partial results was formed<a name="line.428"></a>
-<span class="sourceLineNo">429</span>     */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    SIZE_LIMIT_REACHED_MID_ROW(true, true),<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    TIME_LIMIT_REACHED(true, true),<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>     * Special case of time limit reached to indicate that the time limit was reached in the middle<a name="line.434"></a>
-<span class="sourceLineNo">435</span>     * of a row and thus a partial results was formed<a name="line.435"></a>
-<span class="sourceLineNo">436</span>     */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    TIME_LIMIT_REACHED_MID_ROW(true, true),<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    BATCH_LIMIT_REACHED(true, true);<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    private boolean moreValues;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    private boolean limitReached;<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private NextState(boolean moreValues, boolean limitReached) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      this.moreValues = moreValues;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      this.limitReached = limitReached;<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>    /**<a name="line.448"></a>
-<span class="sourceLineNo">449</span>     * @return true when the state indicates that more values may follow those that have been<a name="line.449"></a>
-<span class="sourceLineNo">450</span>     *         returned<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    public boolean hasMoreValues() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return this.moreValues;<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>     * @return true when the state indicates that a limit has been reached and scan should stop<a name="line.457"></a>
-<span class="sourceLineNo">458</span>     */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    public boolean limitReached() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      return this.limitReached;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>    public static boolean isValidState(NextState state) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return state != null;<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>    public static boolean hasMoreValues(NextState state) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return isValidState(state) &amp;&amp; state.hasMoreValues();<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>  /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * The various scopes where a limit can be enforced. Used to differentiate when a limit should be<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * enforced or not.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public enum LimitScope {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    /**<a name="line.477"></a>
-<span class="sourceLineNo">478</span>     * Enforcing a limit between rows means that the limit will not be considered until all the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>     * cells for a particular row have been retrieved<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    BETWEEN_ROWS(0),<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>     * Enforcing a limit between cells means that the limit will be considered after each full cell<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * has been retrieved<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    BETWEEN_CELLS(1);<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>     * When enforcing a limit, we must check that the scope is appropriate for enforcement.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>     * &lt;p&gt;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>     * To communicate this concept, each scope has a depth. A limit will be enforced if the depth of<a name="line.492"></a>
-<span class="sourceLineNo">493</span>     * the checker's scope is less than or equal to the limit's scope. This means that when checking<a name="line.493"></a>
-<span class="sourceLineNo">494</span>     * limits, the checker must know their own scope (i.e. are they checking the limits between<a name="line.494"></a>
-<span class="sourceLineNo">495</span>     * rows, between cells, etc...)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int depth;<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    LimitScope(int depth) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.depth = depth;<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>    int depth() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return depth;<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>     * @param checkerScope The scope in which the limit is being checked<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     * @return true when the checker is in a scope that indicates the limit can be enforced. Limits<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *         can be enforced from "higher or equal" scopes (i.e. the checker's scope is at a<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *         lesser depth than the limit)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    boolean canEnforceLimitFromScope(LimitScope checkerScope) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      return checkerScope != null &amp;&amp; checkerScope.depth() &lt;= depth;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * The different fields that can be used as limits in calls to<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * {@link InternalScanner#next(java.util.List)} and {@link RegionScanner#next(java.util.List)}<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private static class LimitFields {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Default values of the limit fields. Defined such that if a field does NOT change from its<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     * default, it will not be enforced<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     */<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    private static int DEFAULT_BATCH = -1;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    private static long DEFAULT_SIZE = -1L;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    private static long DEFAULT_TIME = -1L;<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>     * Default scope that is assigned to a limit if a scope is not specified.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    private static final LimitScope DEFAULT_SCOPE = LimitScope.BETWEEN_ROWS;<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    // The batch limit will always be enforced between cells, thus, there isn't a field to hold the<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // batch scope<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    int batch = DEFAULT_BATCH;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    LimitScope sizeScope = DEFAULT_SCOPE;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // The sum of cell data sizes(key + value). The Cell data might be in on heap or off heap area.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    long dataSize = DEFAULT_SIZE;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    // The sum of heap space occupied by all tracked cells. This includes Cell POJO's overhead as<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    // such AND data cells of Cells which are in on heap area.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long heapSize = DEFAULT_SIZE;<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>    LimitScope timeScope = DEFAULT_SCOPE;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    long time = DEFAULT_TIME;<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     * Fields keep their default values.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>     */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    LimitFields() {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    LimitFields(int batch, LimitScope sizeScope, long size, long heapSize, LimitScope timeScope,<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        long time) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      setFields(batch, sizeScope, size, heapSize, timeScope, time);<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>    void copy(LimitFields limitsToCopy) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      if (limitsToCopy != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        setFields(limitsToCopy.getBatch(), limitsToCopy.getSizeScope(), limitsToCopy.getDataSize(),<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            limitsToCopy.getHeapSize(), limitsToCopy.getTimeScope(), limitsToCopy.getTime());<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<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>     * Set all fields together.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>     * @param batch<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * @param sizeScope<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     * @param dataSize<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    void setFields(int batch, LimitScope sizeScope, long dataSize, long heapSize,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        LimitScope timeScope, long time) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      setBatch(batch);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      setSizeScope(sizeScope);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      setDataSize(dataSize);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      setHeapSize(heapSize);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      setTimeScope(timeScope);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      setTime(time);<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>    int getBatch() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.batch;<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>    void setBatch(int batch) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.batch = batch;<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>     * @param checkerScope<a name="line.593"></a>
-<span class="sourceLineNo">594</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.594"></a>
-<span class="sourceLineNo">595</span>     */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    boolean canEnforceBatchLimitFromScope(LimitScope checkerScope) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return LimitScope.BETWEEN_CELLS.canEnforceLimitFromScope(checkerScope);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    long getDataSize() {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      return this.dataSize;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    long getHeapSize() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.heapSize;<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>    void setDataSize(long dataSize) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      this.dataSize = dataSize;<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>    void setHeapSize(long heapSize) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      this.heapSize = heapSize;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>     * @return {@link LimitScope} indicating scope in which the size limit is enforced<a name="line.617"></a>
-<span class="sourceLineNo">618</span>     */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    LimitScope getSizeScope() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.sizeScope;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>     * Change the scope in which the size limit is enforced<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    void setSizeScope(LimitScope scope) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      this.sizeScope = scope;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>     * @param checkerScope<a name="line.631"></a>
-<span class="sourceLineNo">632</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean canEnforceSizeLimitFromScope(LimitScope checkerScope) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.sizeScope.canEnforceLimitFromScope(checkerScope);<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>    long getTime() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      return this.time;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    void setTime(long time) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.time = time;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>    /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * @return {@link LimitScope} indicating scope in which the time limit is enforced<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    LimitScope getTimeScope() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.timeScope;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     * Change the scope in which the time limit is enforced<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     */<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    void setTimeScope(LimitScope scope) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      this.timeScope = scope;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * @param checkerScope<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    boolean canEnforceTimeLimitFromScope(LimitScope checkerScope) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return this.timeScope.canEnforceLimitFromScope(checkerScope);<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>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public String toString() {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      StringBuilder sb = new StringBuilder();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      sb.append("{");<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>      sb.append("batch:");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      sb.append(batch);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>      sb.append(", dataSize:");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      sb.append(dataSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      sb.append(", heapSize:");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      sb.append(heapSize);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      sb.append(", sizeScope:");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      sb.append(sizeScope);<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span>      sb.append(", time:");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      sb.append(time);<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>      sb.append(", timeScope:");<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      sb.append(timeScope);<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>      sb.append("}");<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      return sb.toString();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span>}<a name="line.695"></a>
+<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  final ServerSideScanMetrics metrics;<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.limits = new LimitFields();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // Progress fields are initialized to 0<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.keepProgress = keepProgress;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.scannerState = DEFAULT_STATE;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  boolean isTrackingMetrics() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return this.metrics != null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  ServerSideScanMetrics getMetrics() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    assert isTrackingMetrics();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return this.metrics;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  boolean getKeepProgress() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.keepProgress = keepProgress;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  void incrementBatchProgress(int batch) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    int currentBatch = progress.getBatch();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    progress.setBatch(currentBatch + batch);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<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>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    long curDataSize = progress.getDataSize();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    long curHeapSize = progress.getHeapSize();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    progress.setHeapSize(curHeapSize + heapSize);<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>  /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  void updateTimeProgress() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    progress.setTime(System.currentTimeMillis());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  int getBatchProgress() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return progress.getBatch();<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>  long getDataSizeProgress() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return progress.getHeapSize();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  long getTimeProgress() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    setBatchProgress(batchProgress);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    progress.setDataSize(dataSizeProgress);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    progress.setTime(timeProgress);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * values<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void clearProgress() {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * @param state<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @return The state that was passed in.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  NextState setScannerState(NextState state) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!NextState.isValidState(state)) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return state;<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>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   *         a limit in the middle of a row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  boolean mayHaveMoreCellsInRow() {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<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>   * @param checkerScope<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param checkerScope<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>   * @param checkerScope<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<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>  /**<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @param checkerScope<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>   * @param scope The scope in which the size limit will be enforced<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    li

<TRUNCATED>

[38/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
index 7b52309..2e6bdd9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.361">RSRpcServices.RegionScannersCloseCallBack</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.358">RSRpcServices.RegionScannersCloseCallBack</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">An RpcCallBack that creates a list of scanners that needs to perform callBack operation on
@@ -214,7 +214,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>scanners</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.362">scanners</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.359">scanners</a></pre>
 </li>
 </ul>
 </li>
@@ -231,7 +231,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannersCloseCallBack</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.361">RegionScannersCloseCallBack</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.358">RegionScannersCloseCallBack</a>()</pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>addScanner</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.364">addScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.361">addScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
 </li>
 </ul>
 <a name="run--">
@@ -257,7 +257,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.369">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.366">run</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run--">RpcCallback</a></code></span></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>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
index bc8639d..b4296b9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.418">RSRpcServices.ScannerListener</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.415">RSRpcServices.ScannerListener</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseListener.html" title="interface in org.apache.hadoop.hbase.regionserver">LeaseListener</a></pre>
 <div class="block">Instantiated as a scanner lease. If the lease times out, the scanner is
@@ -210,7 +210,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseLis
 <ul class="blockListLast">
 <li class="blockList">
 <h4>scannerName</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.419">scannerName</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.416">scannerName</a></pre>
 </li>
 </ul>
 </li>
@@ -227,7 +227,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseLis
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScannerListener</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.421">ScannerListener</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;n)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.418">ScannerListener</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;n)</pre>
 </li>
 </ul>
 </li>
@@ -244,7 +244,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseLis
 <ul class="blockListLast">
 <li class="blockList">
 <h4>leaseExpired</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.426">leaseExpired</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.423">leaseExpired</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseListener.html#leaseExpired--">LeaseListener</a></code></span></div>
 <div class="block">When a lease expires, this method is called.</div>
 <dl>


[26/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
index ff0f5c4..f54c12f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
@@ -38,155 +38,167 @@
 <span class="sourceLineNo">030</span>  private long startTime;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>  private long statusTime;<a name="line.31"></a>
 <span class="sourceLineNo">032</span>  private long stateTime;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>  <a name="line.33"></a>
-<span class="sourceLineNo">034</span>  private volatile String status;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>  private volatile String description;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  <a name="line.36"></a>
-<span class="sourceLineNo">037</span>  protected volatile State state = State.RUNNING;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>  private static final ObjectMapper MAPPER = new ObjectMapper();<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  public MonitoredTaskImpl() {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    startTime = System.currentTimeMillis();<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    statusTime = startTime;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>    stateTime = startTime;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  }<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  @Override<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  public synchronized MonitoredTaskImpl clone() {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>    try {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      return (MonitoredTaskImpl) super.clone();<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    } catch (CloneNotSupportedException e) {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>      throw new AssertionError(); // Won't happen<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    }<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  @Override<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public long getStartTime() {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    return startTime;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  <a name="line.60"></a>
-<span class="sourceLineNo">061</span>  @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public String getDescription() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    return description;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  public String getStatus() {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    return status;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public long getStatusTime() {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    return statusTime;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  <a name="line.75"></a>
-<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public State getState() {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    return state;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  <a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @Override<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public long getStateTime() {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return stateTime;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  <a name="line.85"></a>
-<span class="sourceLineNo">086</span>  @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public long getCompletionTimestamp() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    if (state == State.COMPLETE || state == State.ABORTED) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      return stateTime;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    return -1;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void markComplete(String status) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    setState(State.COMPLETE);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    setStatus(status);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  @Override<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public void pause(String msg) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    setState(State.WAITING);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    setStatus(msg);<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>  @Override<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  public void resume(String msg) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    setState(State.RUNNING);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    setStatus(msg);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public void abort(String msg) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    setStatus(msg);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    setState(State.ABORTED);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  <a name="line.117"></a>
-<span class="sourceLineNo">118</span>  @Override<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public void setStatus(String status) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    this.status = status;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    statusTime = System.currentTimeMillis();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  protected void setState(State state) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.state = state;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    stateTime = System.currentTimeMillis();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public void setDescription(String description) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.description = description;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  @Override<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void cleanup() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    if (state == State.RUNNING) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      setState(State.ABORTED);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">033</span>  private long warnTime;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>  private volatile String status;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>  private volatile String description;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>  <a name="line.37"></a>
+<span class="sourceLineNo">038</span>  protected volatile State state = State.RUNNING;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  private static final ObjectMapper MAPPER = new ObjectMapper();<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>  public MonitoredTaskImpl() {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    startTime = System.currentTimeMillis();<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    statusTime = startTime;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    stateTime = startTime;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    warnTime = startTime;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  @Override<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public synchronized MonitoredTaskImpl clone() {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    try {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      return (MonitoredTaskImpl) super.clone();<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    } catch (CloneNotSupportedException e) {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      throw new AssertionError(); // Won't happen<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    }<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  @Override<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  public long getStartTime() {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    return startTime;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  <a name="line.62"></a>
+<span class="sourceLineNo">063</span>  @Override<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public String getDescription() {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    return description;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  @Override<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public String getStatus() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    return status;<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>  @Override<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public long getStatusTime() {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    return statusTime;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  <a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @Override<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public State getState() {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    return state;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  <a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @Override<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public long getStateTime() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return stateTime;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public long getWarnTime() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    return warnTime;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  @Override<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public long getCompletionTimestamp() {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    if (state == State.COMPLETE || state == State.ABORTED) {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      return stateTime;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    return -1;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public void markComplete(String status) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    setState(State.COMPLETE);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    setStatus(status);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  @Override<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public void pause(String msg) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    setState(State.WAITING);<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    setStatus(msg);<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>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public void resume(String msg) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    setState(State.RUNNING);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    setStatus(msg);<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>  @Override<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  public void abort(String msg) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    setStatus(msg);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    setState(State.ABORTED);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  <a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @Override<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public void setStatus(String status) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.status = status;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    statusTime = System.currentTimeMillis();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  protected void setState(State state) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    this.state = state;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    stateTime = System.currentTimeMillis();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @Override<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void setDescription(String description) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    this.description = description;<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>  /**<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * Force the completion timestamp backwards so that<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * it expires now.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public void expireNow() {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    stateTime -= 180 * 1000;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>  @Override<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  public Map&lt;String, Object&gt; toMap() {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    map.put("description", getDescription());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    map.put("status", getStatus());<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    map.put("state", getState());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    map.put("starttimems", getStartTime());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    map.put("statustimems", getCompletionTimestamp());<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    map.put("statetimems", getCompletionTimestamp());<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return map;<a name="line.158"></a>
+<span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public void setWarnTime(long t) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    this.warnTime = t;<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>  @Override<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  public void cleanup() {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    if (state == State.RUNNING) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      setState(State.ABORTED);<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><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * Force the completion timestamp backwards so that<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * it expires now.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public void expireNow() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    stateTime -= 180 * 1000;<a name="line.158"></a>
 <span class="sourceLineNo">159</span>  }<a name="line.159"></a>
 <span class="sourceLineNo">160</span><a name="line.160"></a>
 <span class="sourceLineNo">161</span>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public String toJSON() throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return MAPPER.writeValueAsString(toMap());<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public String toString() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    StringBuilder sb = new StringBuilder(512);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    sb.append(getDescription());<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    sb.append(": status=");<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    sb.append(getStatus());<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    sb.append(", state=");<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    sb.append(getState());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    sb.append(", startTime=");<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    sb.append(getStartTime());<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    sb.append(", completionTime=");<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    sb.append(getCompletionTimestamp());<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    return sb.toString();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>}<a name="line.181"></a>
+<span class="sourceLineNo">162</span>  public Map&lt;String, Object&gt; toMap() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    Map&lt;String, Object&gt; map = new HashMap&lt;&gt;();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    map.put("description", getDescription());<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    map.put("status", getStatus());<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    map.put("state", getState());<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    map.put("starttimems", getStartTime());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    map.put("statustimems", getCompletionTimestamp());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    map.put("statetimems", getCompletionTimestamp());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    return map;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public String toJSON() throws IOException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return MAPPER.writeValueAsString(toMap());<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>  @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public String toString() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    StringBuilder sb = new StringBuilder(512);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    sb.append(getDescription());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    sb.append(": status=");<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    sb.append(getStatus());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    sb.append(", state=");<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    sb.append(getState());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    sb.append(", startTime=");<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    sb.append(getStartTime());<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    sb.append(", completionTime=");<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    sb.append(getCompletionTimestamp());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    return sb.toString();<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>}<a name="line.193"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html
new file mode 100644
index 0000000..380e362
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html
@@ -0,0 +1,355 @@
+<!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> *<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<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.monitoring;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.PrintWriter;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.lang.ref.WeakReference;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.lang.reflect.InvocationHandler;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.lang.reflect.Method;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.lang.reflect.Proxy;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.ArrayList;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Iterator;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.collections.buffer.CircularFifoBuffer;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Singleton which keeps track of tasks going on in this VM.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * A Task here is anything which takes more than a few seconds<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * and the user might want to inquire about the status<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TaskMonitor {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(TaskMonitor.class);<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final String MAX_TASKS_KEY = "hbase.taskmonitor.max.tasks";<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final int DEFAULT_MAX_TASKS = 1000;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public static final String RPC_WARN_TIME_KEY = "hbase.taskmonitor.rpc.warn.time";<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public static final long DEFAULT_RPC_WARN_TIME = 0;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public static final String EXPIRATION_TIME_KEY = "hbase.taskmonitor.expiration.time";<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public static final long DEFAULT_EXPIRATION_TIME = 60*1000;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public static final String MONITOR_INTERVAL_KEY = "hbase.taskmonitor.monitor.interval";<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final long DEFAULT_MONITOR_INTERVAL = 10*1000;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static TaskMonitor instance;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private final int maxTasks;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final long rpcWarnTime;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private final long expirationTime;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final CircularFifoBuffer tasks;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final List&lt;TaskAndWeakRefPair&gt; rpcTasks;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final long monitorInterval;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private Thread monitorThread;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  TaskMonitor(Configuration conf) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    maxTasks = conf.getInt(MAX_TASKS_KEY, DEFAULT_MAX_TASKS);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    expirationTime = conf.getLong(EXPIRATION_TIME_KEY, DEFAULT_EXPIRATION_TIME);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    rpcWarnTime = conf.getLong(RPC_WARN_TIME_KEY, DEFAULT_RPC_WARN_TIME);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    tasks = new CircularFifoBuffer(maxTasks);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    rpcTasks = Lists.newArrayList();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    monitorInterval = conf.getLong(MONITOR_INTERVAL_KEY, DEFAULT_MONITOR_INTERVAL);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    monitorThread = new Thread(new MonitorRunnable());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    Threads.setDaemonThreadRunning(monitorThread, "Monitor thread for TaskMonitor");<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Get singleton instance.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * TODO this would be better off scoped to a single daemon<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static synchronized TaskMonitor get() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    if (instance == null) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      instance = new TaskMonitor(HBaseConfiguration.create());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    return instance;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  <a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public synchronized MonitoredTask createStatus(String description) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    MonitoredTask stat = new MonitoredTaskImpl();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    stat.setDescription(description);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        stat.getClass().getClassLoader(),<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        new Class&lt;?&gt;[] { MonitoredTask.class },<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    if (tasks.isFull()) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      purgeExpiredTasks();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    tasks.add(pair);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    return proxy;<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>  public synchronized MonitoredRPCHandler createRPCStatus(String description) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    stat.setDescription(description);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance(<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        stat.getClass().getClassLoader(),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        new Class&lt;?&gt;[] { MonitoredRPCHandler.class },<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    rpcTasks.add(pair);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return proxy;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private synchronized void warnStuckTasks() {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (rpcWarnTime &gt; 0) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          it.hasNext();) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        TaskAndWeakRefPair pair = it.next();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        MonitoredTask stat = pair.get();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        if ((stat.getState() == MonitoredTaskImpl.State.RUNNING) &amp;&amp;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            (now &gt;= stat.getWarnTime() + rpcWarnTime)) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          LOG.warn("Task may be stuck: " + stat);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>          stat.setWarnTime(now);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private synchronized void purgeExpiredTasks() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>         it.hasNext();) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      TaskAndWeakRefPair pair = it.next();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      MonitoredTask stat = pair.get();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      <a name="line.139"></a>
+<span class="sourceLineNo">140</span>      if (pair.isDead()) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        // The class who constructed this leaked it. So we can<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        // assume it's done.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        if (stat.getState() == MonitoredTaskImpl.State.RUNNING) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          LOG.warn("Status " + stat + " appears to have been leaked");<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          stat.cleanup();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      <a name="line.148"></a>
+<span class="sourceLineNo">149</span>      if (canPurge(stat)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        it.remove();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<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><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Produces a list containing copies of the current state of all non-expired <a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * MonitoredTasks handled by this TaskMonitor.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @return A complete list of MonitoredTasks.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public synchronized List&lt;MonitoredTask&gt; getTasks() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    purgeExpiredTasks();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;MonitoredTask&gt; ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks.size());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         it.hasNext();) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      TaskAndWeakRefPair pair = it.next();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      MonitoredTask t = pair.get();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      ret.add(t.clone());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>         it.hasNext();) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      TaskAndWeakRefPair pair = it.next();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      MonitoredTask t = pair.get();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      ret.add(t.clone());<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return ret;<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 boolean canPurge(MonitoredTask stat) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    long cts = stat.getCompletionTimestamp();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    return (cts &gt; 0 &amp;&amp; EnvironmentEdgeManager.currentTime() - cts &gt; expirationTime);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public void dumpAsText(PrintWriter out) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    <a name="line.185"></a>
+<span class="sourceLineNo">186</span>    List&lt;MonitoredTask&gt; tasks = getTasks();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (MonitoredTask task : tasks) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      out.println("Task: " + task.getDescription());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      out.println("Status: " + task.getState() + ":" + task.getStatus());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      long running = (now - task.getStartTime())/1000;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (task.getCompletionTimestamp() != -1) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        long completed = (now - task.getCompletionTimestamp()) / 1000;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        out.println("Completed " + completed + "s ago");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        out.println("Ran for " +<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            (task.getCompletionTimestamp() - task.getStartTime())/1000<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            + "s");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        out.println("Running for " + running + "s");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      out.println();<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><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public synchronized void shutdown() {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    if (this.monitorThread != null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      monitorThread.interrupt();<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><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * This class encapsulates an object as well as a weak reference to a proxy<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * that passes through calls to that object. In art form:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * &lt;pre&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   *     Proxy  &lt;------------------<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   *       |                       \<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   *       v                        \<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * PassthroughInvocationHandler   |  weak reference<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   *       |                       /<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * MonitoredTaskImpl            / <a name="line.219"></a>
+<span class="sourceLineNo">220</span>   *       |                     /<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * StatAndWeakRefProxy  ------/<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;/pre&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * Since we only return the Proxy to the creator of the MonitorableStatus,<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * this means that they can leak that object, and we'll detect it<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * since our weak reference will go null. But, we still have the actual<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * object, so we can log it and display it as a leaked (incomplete) action.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  private static class TaskAndWeakRefPair {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    private MonitoredTask impl;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    private WeakReference&lt;MonitoredTask&gt; weakProxy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    <a name="line.231"></a>
+<span class="sourceLineNo">232</span>    public TaskAndWeakRefPair(MonitoredTask stat,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        MonitoredTask proxy) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      this.impl = stat;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      this.weakProxy = new WeakReference&lt;&gt;(proxy);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    <a name="line.237"></a>
+<span class="sourceLineNo">238</span>    public MonitoredTask get() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return impl;<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>    public boolean isDead() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      return weakProxy.get() == null;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  <a name="line.246"></a>
+<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * An InvocationHandler that simply passes through calls to the original <a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * object.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  private static class PassthroughInvocationHandler&lt;T&gt; implements InvocationHandler {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    private T delegatee;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    <a name="line.253"></a>
+<span class="sourceLineNo">254</span>    public PassthroughInvocationHandler(T delegatee) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      this.delegatee = delegatee;<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>    public Object invoke(Object proxy, Method method, Object[] args)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        throws Throwable {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return method.invoke(delegatee, args);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }    <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>  private class MonitorRunnable implements Runnable {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    private boolean running = true;<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>    public void run() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      while (running) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          Thread.sleep(monitorInterval);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          if (tasks.isFull()) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            purgeExpiredTasks();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          warnStuckTasks();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } catch (InterruptedException e) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          running = false;<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>}<a name="line.283"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[44/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 837212d..a42b239 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -289,7 +289,7 @@
 <td>2024</td>
 <td>0</td>
 <td>0</td>
-<td>12792</td></tr></table></div>
+<td>12788</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -847,7 +847,7 @@
 <td><a href="#org.apache.hadoop.hbase.client.AsyncScanSingleRegionRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>1</td></tr>
+<td>2</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.AsyncSingleRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncSingleRequestRpcRetryingCaller.java</a></td>
 <td>0</td>
@@ -3619,3276 +3619,3281 @@
 <td>0</td>
 <td>1</td></tr>
 <tr class="b">
+<td><a href="#org.apache.hadoop.hbase.monitoring.TaskMonitor.java">org/apache/hadoop/hbase/monitoring/TaskMonitor.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.ThreadMonitoring.java">org/apache/hadoop/hbase/monitoring/ThreadMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceStateManager.java">org/apache/hadoop/hbase/namespace/NamespaceStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.java">org/apache/hadoop/hbase/namespace/NamespaceTableAndRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.net.Address.java">org/apache/hadoop/hbase/net/Address.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.ByteBuff.java">org/apache/hadoop/hbase/nio/ByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.MultiByteBuff.java">org/apache/hadoop/hbase/nio/MultiByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.SingleByteBuff.java">org/apache/hadoop/hbase/nio/SingleByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.MasterProcedureManager.java">org/apache/hadoop/hbase/procedure/MasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.Procedure.java">org/apache/hadoop/hbase/procedure/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMember.java">org/apache/hadoop/hbase/procedure/ProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.RegionServerProcedureManager.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.AbstractProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.BadProcedureException.java">org/apache/hadoop/hbase/procedure2/BadProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.LockAndQueue.java">org/apache/hadoop/hbase/procedure2/LockAndQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.Procedure.java">org/apache/hadoop/hbase/procedure2/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureDeque.java">org/apache/hadoop/hbase/procedure2/ProcedureDeque.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureScheduler.java">org/apache/hadoop/hbase/procedure2/ProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureUtil.java">org/apache/hadoop/hbase/procedure2/ProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>103</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.MasterQuotaManager.java">org/apache/hadoop/hbase/quotas/MasterQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NamespaceQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiter.java">org/apache/hadoop/hbase/quotas/QuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaObserverChore.java">org/apache/hadoop/hbase/quotas/QuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceLimitSettings.java">org/apache/hadoop/hbase/quotas/SpaceLimitSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottlingException.java">org/apache/hadoop/hbase/quotas/ThrottlingException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.MissingSnapshotViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/MissingSnapshotViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellChunkImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CellChunkImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellChunkMap.java">org/apache/hadoop/hbase/regionserver/CellChunkMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChangedReadersObserver.java">org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactSplit.java">org/apache/hadoop/hbase/regionserver/CompactSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionPipeline.java">org/apache/hadoop/hbase/regionserver/CompactionPipeline.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionRequestor.java">org/apache/hadoop/hbase/regionserver/CompactionRequestor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionTool.java">org/apache/hadoop/hbase/regionserver/CompactionTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompositeImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelimitedKeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DisabledRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion.java">org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FifoRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/FifoRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushAllLargeStoresPolicy.java">org/apache/hadoop/hbase/regionserver/FlushAllLargeStoresPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushLargeStoresPolicy.java">org/apache/hadoop/hbase/regionserver/FlushLargeStoresPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushNonSloppyStoresFirstPolicy.java">org/apache/hadoop/hbase/regionserver/FlushNonSloppyStoresFirstPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushPolicyFactory.java">org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequestListener.java">org/apache/hadoop/hbase/regionserver/FlushRequestListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequester.java">org/apache/hadoop/hbase/regionserver/FlushRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HMobStore.java">org/apache/hadoop/hbase/regionserver/HMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>130</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>54</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactorSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactorSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreMergerSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreMergerSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsHeapMemoryManagerSource.java">org/apache/hadoop/hbase/regionserver/MetricsHeapMemoryManagerSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactoryImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionWrapper.java">org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTable.java">org/apache/hadoop/hbase/regionserver/MetricsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableAggregateSourceImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableAggregateSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableSourceImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperAggregateImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiRowMutationProcessor.java">org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableSegment.java">org/apache/hadoop/hbase/regionserver/MutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NoOpHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/NoOpHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>148</td></tr>
-<tr class="a">
+<td>145</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>62</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionMergeRequest.java">org/apache/hadoop/hbase/regionserver/RegionMergeRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionScanner.java">org/apache/hadoop/hbase/regionserver/RegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerServices.java">org/apache/hadoop/hbase/regionserver/RegionServerServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServicesForStores.java">org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationService.java">org/apache/hadoop/hbase/regionserver/ReplicationService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RowProcessor.java">org/apache/hadoop/hbase/regionserver/RowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanInfo.java">org/apache/hadoop/hbase/regionserver/ScanInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerContext.java">org/apache/hadoop/hbase/regionserver/ScannerContext.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>14</td></tr>
-<tr class="a">
+<td>12</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerIdGenerator.java">org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager.java">org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Segment.java">org/apache/hadoop/hbase/regionserver/Segment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentFactory.java">org/apache/hadoop/hbase/regionserver/SegmentFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentScanner.java">org/apache/hadoop/hbase/regionserver/SegmentScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ServerNonceManager.java">org/apache/hadoop/hbase/regionserver/ServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShipperListener.java">org/apache/hadoop/hbase/regionserver/ShipperListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShutdownHook.java">org/apache/hadoop/hbase/regionserver/ShutdownHook.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SimpleRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitLogWorker.java">org/apache/hadoop/hbase/regionserver/SplitLogWorker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitRequest.java">org/apache/hadoop/hbase/regionserver/SplitRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy.java">org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Store.java">org/apache/hadoop/hbase/regionserver/Store.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreEngine.java">org/apache/hadoop/hbase/regionserver/StoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFile.java">org/apache/hadoop/hbase/regionserver/StoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileComparators.java">org/apache/hadoop/hbase/regionserver/StoreFileComparators.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileInfo.java">org/apache/hadoop/hbase/regionserver/StoreFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileManager.java">org/apache/hadoop/hbase/regionserver/StoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileReader.java">org/apache/hadoop/hbase/regionserver/StoreFileReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileWriter.java">org/apache/hadoop/hbase/regionserver/StoreFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlushContext.java">org/apache/hadoop/hbase/regionserver/StoreFlushContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlusher.java">org/apache/hadoop/hbase/regionserver/StoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreScanner.java">org/apache/hadoop/hbase/regionserver/StoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>26</td></tr>
-<tr class="a">
+<td>25</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreUtils.java">org/apache/hadoop/hbase/regionserver/StoreUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StorefileRefresherChore.java">org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreConfig.java">org/apache/hadoop/hbase/regionserver/StripeStoreConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFlusher.java">org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionContext.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.Compactor.java">org/apache/hadoop/hbase/regionserver/compactions/Compactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CurrentHourProvider.java">org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.DateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/DateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/DefaultCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.ExponentialCompactionWindowFactory.java">org/apache/hadoop/hbase/regionserver/compactions/ExponentialCompactionWindowFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.SortedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/SortedCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.StripeCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.CloseMetaHandler.java">org/apache/hadoop/hbase/regionserver/handler/CloseMetaHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.CloseRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenPriorityRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler.java">org/apache/hadoop/hbase/regionserver/handler/ParallelSeekHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.RegionReplicaFlushHandler.java">org/apache/hadoop/hbase/regionserver/handler/RegionReplicaFlushHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.WALSplitterHandler.java">org/apache/hadoop/hbase/regionserver/handler/WALSplitterHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.DeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.LegacyScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/LegacyScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.NewVersionBehaviorTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/NewVersionBehaviorTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanDeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.java">org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.PressureAwareThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.CompressionContext.java">org/apache/hadoop/hbase/regionserver/wal/CompressionContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.Compressor.java">org/apache/hadoop/hbase/regionserver/wal/Compressor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FSHLog.java">org/apache/hadoop/hbase/regionserver/wal/FSHLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FSWALEntry.java">org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedSyncBeforeLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedSyncBeforeLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.HLogPrettyPrinter.java">org/apache/hadoop/hbase/regionserver/wal/HLogPrettyPrinter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.MetricsWAL.java">org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.MetricsWALEditsReplay.java">org/apache/hadoop/hbase/regionserver/wal/MetricsWALEditsReplay.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSourceImpl.java">org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ReaderBase.java">org/apache/hadoop/hbase/regionserver/wal/ReaderBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureAsyncProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/SecureAsyncProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SequenceIdAccounting.java">org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.java">org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALEdit.java">org/apache/hadoop/hbase/regionserver/wal/WALEdit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALEditsReplaySink.java">org/apache/hadoop/hbase/regionserver/wal/WALEditsReplaySink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALUtil.java">org/apache/hadoop/hbase/regionserver/wal/WALUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.BaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.BulkLoadCellFilter.java">org/apache/hadoop/hbase/replication/BulkLoadCellFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ChainWALEntryFilter.java">org/apache/hadoop/hbase/replication/ChainWALEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ClusterMarkingEntryFilter.java">org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.NamespaceTableCfWALEntryFilter.java">org/apache/hadoop/hbase/replication/NamespaceTableCfWALEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationEndpoint.java">org/apache/hadoop/hbase/replication/ReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationFactory.java">org/apache/hadoop/hbase/replication/ReplicationFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationPeerZKImpl.java">org/apache/hadoop/hbase/replication/ReplicationPeerZKImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationPeers.java">org/apache/hadoop/hbase/replication/ReplicationPeers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationPeersZKImpl.java">org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationQueueInfo.java">org/apache/hadoop/hbase/replication/ReplicationQueueInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationQueues.java">org/apache/hadoop/hbase/replication/ReplicationQueues.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationQueuesClient.java">org/apache/hadoop/hbase/replication/ReplicationQueuesClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationQueuesClientZKImpl.java">org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationQueuesZKImpl.java">org/apache/hadoop/hbase/replication/ReplicationQueuesZKImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationStateZKBase.java">org/apache/hadoop/hbase/replication/ReplicationStateZKBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationTableBase.java">org/apache/hadoop/hbase/replication/ReplicationTableBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationTracker.java">org/apache/hadoop/hbase/replication/ReplicationTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationTrackerZKImpl.java">org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ScopeWALEntryFilter.java">org/apache/hadoop/hbase/replication/ScopeWALEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TableBasedReplicationQueuesClientImpl.java">org/apache/hadoop/hbase/replication/TableBasedReplicationQueuesClientImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TableBasedReplicationQueuesImpl.java">org/apache/hadoop/hbase/replication/TableBasedReplicationQueuesImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.WALCellFilter.java">org/apache/hadoop/hbase/replication/WALCellFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.WALEntryFilter.java">org/apache/hadoop/hbase/replication/WALEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.master.TableCFsUpdater.java">org/apache/hadoop/hbase/replication/master/TableCFsUpdater.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.DumpReplicationQueues.java">org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.java">org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.HFileReplicator.java">org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationGlobalSourceSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSinkSourceImpl.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSinkSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsReplicationSourceSourceImpl.java">org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsSink.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsSource.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.RegionReplicaReplicationEndpoint.java">org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.Replication.java">org/apache/hadoop/hbase/replication/regionserver/Replication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationObserver.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSinkManager.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceFactory.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceInterface.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSyncUp.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.WALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.Constants.java">org/apache/hadoop/hbase/rest/Constants.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.ExistsResource.java">org/apache/hadoop/hbase/rest/ExistsResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.MetricsREST.java">org/apache/hadoop/hbase/rest/MetricsREST.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.MetricsRESTSource.java">org/apache/hadoop/hbase/rest/MetricsRESTSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.MetricsRESTSourceImpl.java">org/apache/hadoop/hbase/rest/MetricsRESTSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.MultiRowResource.java">org/apache/hadoop/hbase/rest/MultiRowResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.NamespacesInstanceResource.java">org/apache/hadoop/hbase/rest/NamespacesInstanceResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.NamespacesResource.java">org/apache/hadoop/hbase/rest/NamespacesResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.ProtobufMessageHandler.java">org/apache/hadoop/hbase/rest/ProtobufMessageHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.RESTServer.java">org/apache/hadoop/hbase/rest/RESTServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RESTServlet.java">org/apache/hadoop/hbase/rest/RESTServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.RESTServletContainer.java">org/apache/hadoop/hbase/rest/RESTServletContainer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RegionsResource.java">org/apache/hadoop/hbase/rest/RegionsResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.ResourceBase.java">org/apache/hadoop/hbase/rest/ResourceBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.ResourceConfig.java">org/apache/hadoop/hbase/rest/ResourceConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.ResultGenerator.java">org/apache/hadoop/hbase/rest/ResultGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RootResource.java">org/apache/hadoop/hbase/rest/RootResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.RowResource.java">org/apache/hadoop/hbase/rest/RowResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.RowResultGenerator.java">org/apache/hadoop/hbase/rest/RowResultGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.RowSpec.java">org/apache/hadoop/hbase/rest/RowSpec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.ScannerResource.java">org/apache/hadoop/hbase/rest/ScannerResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.ScannerResultGenerator.java">org/apache/hadoop/hbase/rest/ScannerResultGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.SchemaResource.java">org/apache/hadoop/hbase/rest/SchemaResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.StorageClusterStatusResource.java">org/apache/hadoop/hbase/rest/StorageClusterStatusResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.StorageClusterVersionResource.java">org/apache/hadoop/hbase/rest/StorageClusterVersionResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.TableResource.java">org/apache/hadoop/hbase/rest/TableResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.TableScanResource.java">org/apache/hadoop/hbase/rest/TableScanResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.VersionResource.java">org/apache/hadoop/hbase/rest/VersionResource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.client.Client.java">org/apache/hadoop/hbase/rest/client/Client.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.client.RemoteAdmin.java">org/apache/hadoop/hbase/rest/client/RemoteAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.client.RemoteHTable.java">org/apache/hadoop/hbase/rest/client/RemoteHTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.client.Response.java">org/apache/hadoop/hbase/rest/client/Response.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.filter.GZIPRequestStream.java">org/apache/hadoop/hbase/rest/filter/GZIPRequestStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.filter.GZIPResponseStream.java">org/apache/hadoop/hbase/rest/filter/GZIPResponseStream.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.filter.GzipFilter.java">org/apache/hadoop/hbase/rest/filter/GzipFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.filter.RestCsrfPreventionFilter.java">org/apache/hadoop/hbase/rest/filter/RestCsrfPreventionFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.CellModel.java">org/apache/hadoop/hbase/rest/model/CellModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.CellSetModel.java">org/apache/hadoop/hbase/rest/model/CellSetModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.ColumnSchemaModel.java">org/apache/hadoop/hbase/rest/model/ColumnSchemaModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.NamespacesInstanceModel.java">org/apache/hadoop/hbase/rest/model/NamespacesInstanceModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.NamespacesModel.java">org/apache/hadoop/hbase/rest/model/NamespacesModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.ScannerModel.java">org/apache/hadoop/hbase/rest/model/ScannerModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>122</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.StorageClusterStatusModel.java">org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.StorageClusterVersionModel.java">org/apache/hadoop/hbase/rest/model/StorageClusterVersionModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableInfoModel.java">org/apache/hadoop/hbase/rest/model/TableInfoModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableListModel.java">org/apache/hadoop/hbase/rest/model/TableListModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableModel.java">org/apache/hadoop/hbase/rest/model/TableModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableRegionModel.java">org/apache/hadoop/hbase/rest/model/TableRegionModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.model.TableSchemaModel.java">org/apache/hadoop/hbase/rest/model/TableSchemaModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rest.model.VersionModel.java">org/apache/hadoop/hbase/rest/model/VersionModel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rest.provider.producer.ProtobufMessageBodyProducer.java">org/apache/hadoop/hbase/rest/provider/producer/ProtobufMessageBodyProducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupAdmin.java">org/apache/hadoop/hbase/rsgroup/RSGroupAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupAdminClient.java">org/apache/hadoop/hbase/rsgroup/RSGroupAdminClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupAdminEndpoint.java">org/apache/hadoop/hbase/rsgroup/RSGroupAdminEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupAdminServer.java">org/apache/hadoop/hbase/rsgroup/RSGroupAdminServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupBasedLoadBalancer.java">org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupInfoManager.java">org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupInfoManagerImpl.java">org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupProtobufUtil.java">org/apache/hadoop/hbase/rsgroup/RSGroupProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.RSGroupableBalancer.java">org/apache/hadoop/hbase/rsgroup/RSGroupableBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.rsgroup.Utility.java">org/apache/hadoop/hbase/rsgroup/Utility.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.AbstractHBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/AbstractHBaseSaslRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.AccessDeniedException.java">org/apache/hadoop/hbase/security/AccessDeniedException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.AuthMethod.java">org/apache/hadoop/hbase/security/AuthMethod.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.CryptoAESWrapHandler.java">org/apache/hadoop/hbase/security/CryptoAESWrapHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.EncryptionUtil.java">org/apache/hadoop/hbase/security/EncryptionUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.HBasePolicyProvider.java">org/apache/hadoop/hbase/security/HBasePolicyProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.HBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/HBaseSaslRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.SaslStatus.java">org/apache/hadoop/hbase/security/SaslStatus.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.SaslUtil.java">org/apache/hadoop/hbase/security/SaslUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.SecurityInfo.java">org/apache/hadoop/hbase/security/SecurityInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.SecurityUtil.java">org/apache/hadoop/hbase/security/SecurityUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.Superusers.java">org/apache/hadoop/hbase/security/Superusers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.User.java">org/apache/hadoop/hbase/security/User.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.security.UserProvider.java">org/apache/hadoop/hbase/security/UserProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.security.access.AccessControlClient.java">org/apach

<TRUNCATED>

[22/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
index 9a8f45d..665ad9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
@@ -26,3462 +26,3459 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.net.BindException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.nio.ByteBuffer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Iterator;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.NavigableMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.TreeSet;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ConcurrentMap;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.LongAdder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.Path;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HConstants;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ServerName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.TableName;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Append;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Get;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Put;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Result;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.User;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.zookeeper.KeeperException;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<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> * Implements the regionserver RPC services.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>@InterfaceAudience.Private<a name="line.229"></a>
-<span class="sourceLineNo">230</span>@SuppressWarnings("deprecation")<a name="line.230"></a>
-<span class="sourceLineNo">231</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    ConfigurationObserver {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /** RPC scheduler to use for the region server. */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.259"></a>
+<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.InterruptedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.BindException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.net.InetSocketAddress;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.UnknownHostException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.ByteBuffer;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Arrays;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.NavigableMap;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.TreeSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.atomic.LongAdder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.commons.logging.Log;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.logging.LogFactory;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ServerName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Append;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Get;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Put;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Result;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.User;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.zookeeper.KeeperException;<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> * Implements the regionserver RPC services.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>@InterfaceAudience.Private<a name="line.226"></a>
+<span class="sourceLineNo">227</span>@SuppressWarnings("deprecation")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    ConfigurationObserver {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /** RPC scheduler to use for the region server. */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  final LongAdder requestCount = new LongAdder();<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  final LongAdder requestCount = new LongAdder();<a name="line.262"></a>
+<span class="sourceLineNo">261</span>  // Request counter for rpc get<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.262"></a>
 <span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  // Request counter for rpc get<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.265"></a>
+<span class="sourceLineNo">264</span>  // Request counter for rpc scan<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.265"></a>
 <span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  // Request counter for rpc scan<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.268"></a>
+<span class="sourceLineNo">267</span>  // Request counter for rpc multi<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Request counter for rpc multi<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.271"></a>
+<span class="sourceLineNo">270</span>  // Request counter for rpc mutate<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // Request counter for rpc mutate<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // Server to handle client requests.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  final RpcServerInterface rpcServer;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  final InetSocketAddress isa;<a name="line.278"></a>
+<span class="sourceLineNo">273</span>  // Server to handle client requests.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  final RpcServerInterface rpcServer;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  final InetSocketAddress isa;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private final HRegionServer regionServer;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private final long maxScannerResultSize;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private final HRegionServer regionServer;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private final long maxScannerResultSize;<a name="line.281"></a>
+<span class="sourceLineNo">280</span>  // The reference to the priority extraction function<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private final PriorityFunction priority;<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // The reference to the priority extraction function<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private final PriorityFunction priority;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private final long minimumScanTimeLimitDelta;<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>   * Row size threshold for multi requests above which a warning is logged<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private final int rowSizeWarnThreshold;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * An Rpc callback for closing a RegionScanner.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private final RegionScanner scanner;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.scanner = scanner;<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.scanner.close();<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><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    private final String scannerName;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final RegionScanner scanner;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final Lease lease;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.scannerName = scannerName;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.scanner = scanner;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.lease = lease;<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>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void run() throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      this.scanner.shipped();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (scanners.containsKey(scannerName)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lease != null) regionServer.leases.addLease(lease);<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * completion of multiGets.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public void addScanner(RegionScanner scanner) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.scanners.add(scanner);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    public void run() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (RegionScanner scanner : scanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        } catch (IOException e) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          LOG.error("Exception while closing the scanner " + scanner, e);<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>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static final class RegionScannerHolder {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final RegionScanner s;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    private final Region r;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    private final RpcCallback closeCallBack;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    private final RpcCallback shippedCallback;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    private byte[] rowOfLastPartialResult;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    private boolean needCursor;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public RegionScannerHolder(String scannerName, RegionScanner s, Region r,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.scannerName = scannerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.s = s;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      this.r = r;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      this.closeCallBack = closeCallBack;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      this.shippedCallback = shippedCallback;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.needCursor = needCursor;<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>    public long getNextCallSeq() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return nextCallSeq.get();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * closed<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private class ScannerListener implements LeaseListener {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    private final String scannerName;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    ScannerListener(final String n) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.scannerName = n;<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>    @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public void leaseExpired() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      if (rsh != null) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        RegionScanner s = rsh.s;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Region region = null;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        try {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            s.close();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } catch (IOException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), 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 {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<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>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                                                        final int index){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final ResultOrException.Builder builder, final int index) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return builder.setIndex(index).build();<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>   * Starts the nonce operation for a mutation, if needed.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutation Mutation.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param nonceGroup Nonce group from the request.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @returns whether to proceed this mutation.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    boolean canProceed = false;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (InterruptedException ex) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return canProceed;<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>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Ends nonce operation for a mutation, if needed.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param mutation Mutation.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      long nonceGroup, boolean success) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (result == null) return;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (clientCellBlockSupported) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      builder.setResult(pbr);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    builder.setStale(!isDefaultRegion);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (results.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (clientCellBlockSupported) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      for (Result res : results) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        builder.addCellsPerResult(res.size());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Result res : results) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        builder.addResults(pbr);<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>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Mutate a list of rows atomically.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   *<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param region<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param actions<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @throws IOException<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  private void mutateRows(final Region region,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      reg

<TRUNCATED>

[15/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
index 87e1c5b..98776b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html
@@ -27,680 +27,678 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.commons.logging.Log;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.commons.logging.LogFactory;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Cell;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * &lt;p&gt;<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * reached<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * &lt;p&gt;<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.50"></a>
-<span class="sourceLineNo">051</span> */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceStability.Evolving<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public class ScannerContext {<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  LimitFields limits;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  LimitFields progress;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  NextState scannerState;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * has been made towards the limits so far.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * &lt;p&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * &lt;p&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * For example: &lt;pre&gt; {@code<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * RegionScanner scanner = ...<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * while(scanner.next(results, context)) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   *   // Do something with a batch of 5 cells<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * saved and considered in future invocations<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  boolean keepProgress;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.98"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.Cell;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * &lt;p&gt;<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * reached<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;p&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * &lt;p&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> */<a name="line.49"></a>
+<span class="sourceLineNo">050</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceStability.Evolving<a name="line.51"></a>
+<span class="sourceLineNo">052</span>public class ScannerContext {<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  LimitFields limits;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  LimitFields progress;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  NextState scannerState;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * has been made towards the limits so far.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * &lt;p&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * &lt;p&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * For example: &lt;pre&gt; {@code<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * RegionScanner scanner = ...<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * while(scanner.next(results, context)) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   *   // Do something with a batch of 5 cells<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * saved and considered in future invocations<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  boolean keepProgress;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private Cell lastPeekedCell = null;<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private Cell peekedCellInHeartbeat = null;<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>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  final ServerSideScanMetrics metrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.limits = new LimitFields();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // Progress fields are initialized to 0<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.keepProgress = keepProgress;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.scannerState = DEFAULT_STATE;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<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>  boolean isTrackingMetrics() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return this.metrics != null;<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>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  ServerSideScanMetrics getMetrics() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assert isTrackingMetrics();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return this.metrics;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  boolean getKeepProgress() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this.keepProgress = keepProgress;<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>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  void incrementBatchProgress(int batch) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    int currentBatch = progress.getBatch();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    progress.setBatch(currentBatch + batch);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    long curDataSize = progress.getDataSize();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    long curHeapSize = progress.getHeapSize();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    progress.setHeapSize(curHeapSize + heapSize);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  void updateTimeProgress() {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    progress.setTime(System.currentTimeMillis());<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>  int getBatchProgress() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return progress.getBatch();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  long getDataSizeProgress() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return progress.getHeapSize();<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>  long getTimeProgress() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    setBatchProgress(batchProgress);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    progress.setDataSize(dataSizeProgress);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    progress.setTime(timeProgress);<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * values<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  void clearProgress() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param state<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return The state that was passed in.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  NextState setScannerState(NextState state) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (!NextState.isValidState(state)) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    return state;<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>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   *         a limit in the middle of a row<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  boolean mayHaveMoreCellsInRow() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<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>   * @param checkerScope<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param checkerScope<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>  /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param checkerScope<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<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>   * @param checkerScope<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>  /**<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param scope The scope in which the size limit will be enforced<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    limits.setTimeScope(scope);<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>  int getBatchLimit() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return limits.getBatch();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  long getDataSizeLimit() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return limits.getDataSize();<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>  long getTimeLimit() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return limits.getTime();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  boolean checkBatchLimit(LimitScope checkerScope) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return hasBatchLimit(checkerScope) &amp;&amp; progress.getBatch() &gt;= limits.getBatch();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  boolean checkSizeLimit(LimitScope checkerScope) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return hasSizeLimit(checkerScope) &amp;&amp; (progress.getDataSize() &gt;= limits.getDataSize()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        || progress.getHeapSize() &gt;= limits.getHeapSize());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<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>   * @param checkerScope The scope that the limit is being checked from. The time limit is always<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *          checked against {@link System#currentTimeMillis()}<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  boolean checkTimeLimit(LimitScope checkerScope) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return hasTimeLimit(checkerScope) &amp;&amp; progress.getTime() &gt;= limits.getTime();<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>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param checkerScope The scope that the limits are being checked from<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return true when some limit is enforceable from the checker's scope and it has been reached<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  boolean checkAnyLimitReached(LimitScope checkerScope) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return checkSizeLimit(checkerScope) || checkBatchLimit(checkerScope)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        || checkTimeLimit(checkerScope);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Cell getPeekedCellInHeartbeat() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return peekedCellInHeartbeat;<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>  public void setPeekedCellInHeartbeat(Cell peekedCellInHeartbeat) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    this.peekedCellInHeartbeat = peekedCellInHeartbeat;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public String toString() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    StringBuilder sb = new StringBuilder();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    sb.append("{");<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    sb.append("limits:");<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    sb.append(limits);<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    sb.append(", progress:");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    sb.append(progress);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>    sb.append(", keepProgress:");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    sb.append(keepProgress);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append(", state:");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append(scannerState);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("}");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    return sb.toString();<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>  public static Builder newBuilder() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return new Builder();<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 static Builder newBuilder(boolean keepProgress) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return new Builder(keepProgress);<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 static final class Builder {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean keepProgress = DEFAULT_KEEP_PROGRESS;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    boolean trackMetrics = false;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    LimitFields limits = new LimitFields();<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private Builder() {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private Builder(boolean keepProgress) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.keepProgress = keepProgress;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public Builder setKeepProgress(boolean keepProgress) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.keepProgress = keepProgress;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return this;<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>    public Builder setTrackMetrics(boolean trackMetrics) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.trackMetrics = trackMetrics;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return this;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public Builder setSizeLimit(LimitScope sizeScope, long dataSizeLimit, long heapSizeLimit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      limits.setDataSize(dataSizeLimit);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      limits.setHeapSize(heapSizeLimit);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      limits.setSizeScope(sizeScope);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return this;<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 Builder setTimeLimit(LimitScope timeScope, long timeLimit) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      limits.setTime(timeLimit);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      limits.setTimeScope(timeScope);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return this;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public Builder setBatchLimit(int batchLimit) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      limits.setBatch(batchLimit);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return this;<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>    public ScannerContext build() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      return new ScannerContext(keepProgress, limits, trackMetrics);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * The possible states a scanner may be in following a call to {@link InternalScanner#next(List)}<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public enum NextState {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    MORE_VALUES(true, false),<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    NO_MORE_VALUES(false, false),<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    SIZE_LIMIT_REACHED(true, true),<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>     * Special case of size limit reached to indicate that the size limit was reached in the middle<a name="line.427"></a>
-<span class="sourceLineNo">428</span>     * of a row and thus a partial results was formed<a name="line.428"></a>
-<span class="sourceLineNo">429</span>     */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    SIZE_LIMIT_REACHED_MID_ROW(true, true),<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    TIME_LIMIT_REACHED(true, true),<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>     * Special case of time limit reached to indicate that the time limit was reached in the middle<a name="line.434"></a>
-<span class="sourceLineNo">435</span>     * of a row and thus a partial results was formed<a name="line.435"></a>
-<span class="sourceLineNo">436</span>     */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    TIME_LIMIT_REACHED_MID_ROW(true, true),<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    BATCH_LIMIT_REACHED(true, true);<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    private boolean moreValues;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    private boolean limitReached;<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private NextState(boolean moreValues, boolean limitReached) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      this.moreValues = moreValues;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      this.limitReached = limitReached;<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>    /**<a name="line.448"></a>
-<span class="sourceLineNo">449</span>     * @return true when the state indicates that more values may follow those that have been<a name="line.449"></a>
-<span class="sourceLineNo">450</span>     *         returned<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    public boolean hasMoreValues() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return this.moreValues;<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>     * @return true when the state indicates that a limit has been reached and scan should stop<a name="line.457"></a>
-<span class="sourceLineNo">458</span>     */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    public boolean limitReached() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      return this.limitReached;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>    public static boolean isValidState(NextState state) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return state != null;<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>    public static boolean hasMoreValues(NextState state) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return isValidState(state) &amp;&amp; state.hasMoreValues();<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>  /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * The various scopes where a limit can be enforced. Used to differentiate when a limit should be<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * enforced or not.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public enum LimitScope {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    /**<a name="line.477"></a>
-<span class="sourceLineNo">478</span>     * Enforcing a limit between rows means that the limit will not be considered until all the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>     * cells for a particular row have been retrieved<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    BETWEEN_ROWS(0),<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>     * Enforcing a limit between cells means that the limit will be considered after each full cell<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * has been retrieved<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    BETWEEN_CELLS(1);<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>     * When enforcing a limit, we must check that the scope is appropriate for enforcement.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>     * &lt;p&gt;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>     * To communicate this concept, each scope has a depth. A limit will be enforced if the depth of<a name="line.492"></a>
-<span class="sourceLineNo">493</span>     * the checker's scope is less than or equal to the limit's scope. This means that when checking<a name="line.493"></a>
-<span class="sourceLineNo">494</span>     * limits, the checker must know their own scope (i.e. are they checking the limits between<a name="line.494"></a>
-<span class="sourceLineNo">495</span>     * rows, between cells, etc...)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int depth;<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    LimitScope(int depth) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.depth = depth;<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>    int depth() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return depth;<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>     * @param checkerScope The scope in which the limit is being checked<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     * @return true when the checker is in a scope that indicates the limit can be enforced. Limits<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *         can be enforced from "higher or equal" scopes (i.e. the checker's scope is at a<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *         lesser depth than the limit)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    boolean canEnforceLimitFromScope(LimitScope checkerScope) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      return checkerScope != null &amp;&amp; checkerScope.depth() &lt;= depth;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * The different fields that can be used as limits in calls to<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * {@link InternalScanner#next(java.util.List)} and {@link RegionScanner#next(java.util.List)}<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private static class LimitFields {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Default values of the limit fields. Defined such that if a field does NOT change from its<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     * default, it will not be enforced<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     */<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    private static int DEFAULT_BATCH = -1;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    private static long DEFAULT_SIZE = -1L;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    private static long DEFAULT_TIME = -1L;<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>     * Default scope that is assigned to a limit if a scope is not specified.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    private static final LimitScope DEFAULT_SCOPE = LimitScope.BETWEEN_ROWS;<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    // The batch limit will always be enforced between cells, thus, there isn't a field to hold the<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // batch scope<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    int batch = DEFAULT_BATCH;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    LimitScope sizeScope = DEFAULT_SCOPE;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // The sum of cell data sizes(key + value). The Cell data might be in on heap or off heap area.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    long dataSize = DEFAULT_SIZE;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    // The sum of heap space occupied by all tracked cells. This includes Cell POJO's overhead as<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    // such AND data cells of Cells which are in on heap area.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long heapSize = DEFAULT_SIZE;<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>    LimitScope timeScope = DEFAULT_SCOPE;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    long time = DEFAULT_TIME;<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     * Fields keep their default values.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>     */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    LimitFields() {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    LimitFields(int batch, LimitScope sizeScope, long size, long heapSize, LimitScope timeScope,<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        long time) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      setFields(batch, sizeScope, size, heapSize, timeScope, time);<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>    void copy(LimitFields limitsToCopy) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      if (limitsToCopy != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        setFields(limitsToCopy.getBatch(), limitsToCopy.getSizeScope(), limitsToCopy.getDataSize(),<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            limitsToCopy.getHeapSize(), limitsToCopy.getTimeScope(), limitsToCopy.getTime());<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<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>     * Set all fields together.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>     * @param batch<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * @param sizeScope<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     * @param dataSize<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    void setFields(int batch, LimitScope sizeScope, long dataSize, long heapSize,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        LimitScope timeScope, long time) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      setBatch(batch);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      setSizeScope(sizeScope);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      setDataSize(dataSize);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      setHeapSize(heapSize);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      setTimeScope(timeScope);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      setTime(time);<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>    int getBatch() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.batch;<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>    void setBatch(int batch) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.batch = batch;<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>     * @param checkerScope<a name="line.593"></a>
-<span class="sourceLineNo">594</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.594"></a>
-<span class="sourceLineNo">595</span>     */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    boolean canEnforceBatchLimitFromScope(LimitScope checkerScope) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return LimitScope.BETWEEN_CELLS.canEnforceLimitFromScope(checkerScope);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    long getDataSize() {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      return this.dataSize;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    long getHeapSize() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.heapSize;<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>    void setDataSize(long dataSize) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      this.dataSize = dataSize;<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>    void setHeapSize(long heapSize) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      this.heapSize = heapSize;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>     * @return {@link LimitScope} indicating scope in which the size limit is enforced<a name="line.617"></a>
-<span class="sourceLineNo">618</span>     */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    LimitScope getSizeScope() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.sizeScope;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>     * Change the scope in which the size limit is enforced<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    void setSizeScope(LimitScope scope) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      this.sizeScope = scope;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>     * @param checkerScope<a name="line.631"></a>
-<span class="sourceLineNo">632</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean canEnforceSizeLimitFromScope(LimitScope checkerScope) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.sizeScope.canEnforceLimitFromScope(checkerScope);<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>    long getTime() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      return this.time;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    void setTime(long time) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.time = time;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>    /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * @return {@link LimitScope} indicating scope in which the time limit is enforced<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    LimitScope getTimeScope() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.timeScope;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     * Change the scope in which the time limit is enforced<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     */<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    void setTimeScope(LimitScope scope) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      this.timeScope = scope;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * @param checkerScope<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    boolean canEnforceTimeLimitFromScope(LimitScope checkerScope) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return this.timeScope.canEnforceLimitFromScope(checkerScope);<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>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public String toString() {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      StringBuilder sb = new StringBuilder();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      sb.append("{");<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>      sb.append("batch:");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      sb.append(batch);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>      sb.append(", dataSize:");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      sb.append(dataSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      sb.append(", heapSize:");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      sb.append(heapSize);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      sb.append(", sizeScope:");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      sb.append(sizeScope);<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span>      sb.append(", time:");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      sb.append(time);<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>      sb.append(", timeScope:");<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      sb.append(timeScope);<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>      sb.append("}");<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      return sb.toString();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span>}<a name="line.695"></a>
+<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  final ServerSideScanMetrics metrics;<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.limits = new LimitFields();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // Progress fields are initialized to 0<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.keepProgress = keepProgress;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.scannerState = DEFAULT_STATE;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  boolean isTrackingMetrics() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return this.metrics != null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  ServerSideScanMetrics getMetrics() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    assert isTrackingMetrics();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return this.metrics;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  boolean getKeepProgress() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.keepProgress = keepProgress;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  void incrementBatchProgress(int batch) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    int currentBatch = progress.getBatch();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    progress.setBatch(currentBatch + batch);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<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>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    long curDataSize = progress.getDataSize();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    long curHeapSize = progress.getHeapSize();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    progress.setHeapSize(curHeapSize + heapSize);<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>  /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  void updateTimeProgress() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    progress.setTime(System.currentTimeMillis());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  int getBatchProgress() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return progress.getBatch();<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>  long getDataSizeProgress() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return progress.getHeapSize();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  long getTimeProgress() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    setBatchProgress(batchProgress);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    progress.setDataSize(dataSizeProgress);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    progress.setTime(timeProgress);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * values<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void clearProgress() {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * @param state<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @return The state that was passed in.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  NextState setScannerState(NextState state) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!NextState.isValidState(state)) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return state;<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>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   *         a limit in the middle of a row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  boolean mayHaveMoreCellsInRow() {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<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>   * @param checkerScope<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param checkerScope<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>   * @param checkerScope<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<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>  /**<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @param checkerScope<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>   * @param scope The scope in which the size limit will be enforced<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span> 

<TRUNCATED>

[19/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
index 9a8f45d..665ad9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
@@ -26,3462 +26,3459 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.net.BindException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.nio.ByteBuffer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Iterator;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.NavigableMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.TreeSet;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ConcurrentMap;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.LongAdder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.Path;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HConstants;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ServerName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.TableName;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Append;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Get;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Put;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Result;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.User;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.zookeeper.KeeperException;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<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> * Implements the regionserver RPC services.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>@InterfaceAudience.Private<a name="line.229"></a>
-<span class="sourceLineNo">230</span>@SuppressWarnings("deprecation")<a name="line.230"></a>
-<span class="sourceLineNo">231</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    ConfigurationObserver {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /** RPC scheduler to use for the region server. */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.259"></a>
+<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.InterruptedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.BindException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.net.InetSocketAddress;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.UnknownHostException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.ByteBuffer;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Arrays;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.NavigableMap;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.TreeSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.atomic.LongAdder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.commons.logging.Log;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.logging.LogFactory;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ServerName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Append;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Get;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Put;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Result;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.User;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.zookeeper.KeeperException;<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> * Implements the regionserver RPC services.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>@InterfaceAudience.Private<a name="line.226"></a>
+<span class="sourceLineNo">227</span>@SuppressWarnings("deprecation")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    ConfigurationObserver {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /** RPC scheduler to use for the region server. */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  final LongAdder requestCount = new LongAdder();<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  final LongAdder requestCount = new LongAdder();<a name="line.262"></a>
+<span class="sourceLineNo">261</span>  // Request counter for rpc get<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.262"></a>
 <span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  // Request counter for rpc get<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.265"></a>
+<span class="sourceLineNo">264</span>  // Request counter for rpc scan<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.265"></a>
 <span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  // Request counter for rpc scan<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.268"></a>
+<span class="sourceLineNo">267</span>  // Request counter for rpc multi<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Request counter for rpc multi<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.271"></a>
+<span class="sourceLineNo">270</span>  // Request counter for rpc mutate<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // Request counter for rpc mutate<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // Server to handle client requests.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  final RpcServerInterface rpcServer;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  final InetSocketAddress isa;<a name="line.278"></a>
+<span class="sourceLineNo">273</span>  // Server to handle client requests.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  final RpcServerInterface rpcServer;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  final InetSocketAddress isa;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private final HRegionServer regionServer;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private final long maxScannerResultSize;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private final HRegionServer regionServer;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private final long maxScannerResultSize;<a name="line.281"></a>
+<span class="sourceLineNo">280</span>  // The reference to the priority extraction function<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private final PriorityFunction priority;<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // The reference to the priority extraction function<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private final PriorityFunction priority;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private final long minimumScanTimeLimitDelta;<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>   * Row size threshold for multi requests above which a warning is logged<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private final int rowSizeWarnThreshold;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * An Rpc callback for closing a RegionScanner.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private final RegionScanner scanner;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.scanner = scanner;<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.scanner.close();<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><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    private final String scannerName;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final RegionScanner scanner;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final Lease lease;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.scannerName = scannerName;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.scanner = scanner;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.lease = lease;<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>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void run() throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      this.scanner.shipped();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (scanners.containsKey(scannerName)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lease != null) regionServer.leases.addLease(lease);<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * completion of multiGets.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public void addScanner(RegionScanner scanner) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.scanners.add(scanner);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    public void run() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (RegionScanner scanner : scanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        } catch (IOException e) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          LOG.error("Exception while closing the scanner " + scanner, e);<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>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static final class RegionScannerHolder {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final RegionScanner s;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    private final Region r;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    private final RpcCallback closeCallBack;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    private final RpcCallback shippedCallback;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    private byte[] rowOfLastPartialResult;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    private boolean needCursor;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public RegionScannerHolder(String scannerName, RegionScanner s, Region r,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.scannerName = scannerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.s = s;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      this.r = r;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      this.closeCallBack = closeCallBack;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      this.shippedCallback = shippedCallback;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.needCursor = needCursor;<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>    public long getNextCallSeq() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return nextCallSeq.get();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * closed<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private class ScannerListener implements LeaseListener {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    private final String scannerName;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    ScannerListener(final String n) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.scannerName = n;<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>    @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public void leaseExpired() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      if (rsh != null) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        RegionScanner s = rsh.s;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Region region = null;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        try {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            s.close();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } catch (IOException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), 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 {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<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>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                                                        final int index){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final ResultOrException.Builder builder, final int index) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return builder.setIndex(index).build();<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>   * Starts the nonce operation for a mutation, if needed.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutation Mutation.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param nonceGroup Nonce group from the request.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @returns whether to proceed this mutation.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    boolean canProceed = false;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (InterruptedException ex) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return canProceed;<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>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Ends nonce operation for a mutation, if needed.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param mutation Mutation.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      long nonceGroup, boolean success) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (result == null) return;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (clientCellBlockSupported) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      builder.setResult(pbr);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    builder.setStale(!isDefaultRegion);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (results.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (clientCellBlockSupported) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      for (Result res : results) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        builder.addCellsPerResult(res.size());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Result res : results) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        builder.addResults(pbr);<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>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Mutate a list of rows atomically.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   *<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param region<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param actions<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @throws IOException<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  private void mutateRows(final Region region,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    

<TRUNCATED>

[30/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
index c21aec6..0362d7f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
@@ -61,516 +61,530 @@
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.53"></a>
 <span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.54"></a>
 <span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Retry caller for scanning a region.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * &lt;p&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * reference of this object and use it to open new single region scanners.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final HashedWheelTimer retryTimer;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private final Scan scan;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ScanMetrics scanMetrics;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final long scannerId;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final ScanResultCache resultCache;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final RawScanResultConsumer consumer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final ClientService.Interface stub;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final HRegionLocation loc;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final boolean regionServerRemote;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final long pauseNs;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final int maxAttempts;<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final long scanTimeoutNs;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final long rpcTimeoutNs;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private final int startLogErrorsCnt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private final HBaseRpcController controller;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private byte[] nextStartRowWhenError;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private boolean includeNextStartRowWhenError;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private long nextCallStartNs;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private int tries;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private long nextCallSeq = -1L;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private enum ScanControllerState {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // usage. We use two things to prevent invalid usage:<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // to be used in the future.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // package private methods can only be called within the implementation of<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Make sure the methods are only called in this thread.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private final Thread callerThread = Thread.currentThread();<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // INITIALIZED -&gt; DESTROYED<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private ScanResumerImpl resumer;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    private void preCheck() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        "The current thread is %s, expected thread is %s, " +<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        Thread.currentThread(), callerThread);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        "Invalid Stopper state %s", state);<a name="line.163"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Retry caller for scanning a region.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * reference of this object and use it to open new single region scanners.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>@InterfaceAudience.Private<a name="line.71"></a>
+<span class="sourceLineNo">072</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final HashedWheelTimer retryTimer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final Scan scan;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final ScanMetrics scanMetrics;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final long scannerId;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final ScanResultCache resultCache;<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final RawScanResultConsumer consumer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ClientService.Interface stub;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final HRegionLocation loc;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final boolean regionServerRemote;<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private final long pauseNs;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final int maxAttempts;<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final long scanTimeoutNs;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private final long rpcTimeoutNs;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private final int startLogErrorsCnt;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private final HBaseRpcController controller;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  private byte[] nextStartRowWhenError;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private boolean includeNextStartRowWhenError;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private long nextCallStartNs;<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private int tries;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long nextCallSeq = -1L;<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private enum ScanControllerState {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // usage. We use two things to prevent invalid usage:<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // to be used in the future.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // package private methods can only be called within the implementation of<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // Make sure the methods are only called in this thread.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    private final Thread callerThread;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private final Optional&lt;Cursor&gt; cursor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // INITIALIZED -&gt; DESTROYED<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private ScanResumerImpl resumer;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    public ScanControllerImpl(ScanResponse resp) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      callerThread = Thread.currentThread();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      cursor = resp.hasCursor() ? Optional.of(ProtobufUtil.toCursor(resp.getCursor()))<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          : Optional.empty();<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    }<a name="line.164"></a>
 <span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    public ScanResumer suspend() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      preCheck();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      state = ScanControllerState.SUSPENDED;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      this.resumer = resumer;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return resumer;<a name="line.172"></a>
+<span class="sourceLineNo">166</span>    private void preCheck() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        "The current thread is %s, expected thread is %s, " +<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        Thread.currentThread(), callerThread);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        "Invalid Stopper state %s", state);<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>    @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public void terminate() {<a name="line.176"></a>
+<span class="sourceLineNo">176</span>    public ScanResumer suspend() {<a name="line.176"></a>
 <span class="sourceLineNo">177</span>      preCheck();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      state = ScanControllerState.TERMINATED;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // return the current state, and set the state to DESTROYED.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    ScanControllerState destroy() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      ScanControllerState state = this.state;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      this.state = ScanControllerState.DESTROYED;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      return state;<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>  private enum ScanResumerState {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  // controller.suspend().resume()<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // package private methods can only be called within the implementation of<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // INITIALIZED -&gt; RESUMED<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private ScanResponse resp;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int numberOfCompleteRows;<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // renewal task.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private Timeout leaseRenewer;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void resume() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ScanResponse localResp;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      int localNumberOfCompleteRows;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      synchronized (this) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          // user calls this method before we call prepare, so just set the state to<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          // RESUMED, the implementation will just go on.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          state = ScanResumerState.RESUMED;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          return;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        if (state == ScanResumerState.RESUMED) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          // already resumed, give up.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          return;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        state = ScanResumerState.RESUMED;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        if (leaseRenewer != null) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          leaseRenewer.cancel();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        localResp = this.resp;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      completeOrNext(localResp, localNumberOfCompleteRows);<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>    private void scheduleRenewLeaseTask() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      // the scan has already been resumed, give up<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (state == ScanResumerState.RESUMED) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        return;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      renewLease();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      scheduleRenewLeaseTask();<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>    // return false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // for more details.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      if (state == ScanResumerState.RESUMED) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return false;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      state = ScanResumerState.SUSPENDED;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.resp = resp;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // automatically so we do not need to renew lease.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      if (resp.getMoreResultsInRegion()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        // schedule renew lease task<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        scheduleRenewLeaseTask();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return true;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.retryTimer = retryTimer;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.scan = scan;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    this.scanMetrics = scanMetrics;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    this.scannerId = scannerId;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.resultCache = resultCache;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.consumer = consumer;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    this.stub = stub;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    this.loc = loc;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.pauseNs = pauseNs;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    this.maxAttempts = maxAttempts;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    if (scan.isReversed()) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    } else {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this.exceptions = new ArrayList&lt;&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private long elapsedMs() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<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 long remainingTimeNs() {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void closeScanner() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    resetController(controller, rpcTimeoutNs);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    stub.scan(controller, req, resp -&gt; {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      if (controller.failed()) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          controller.getFailed());<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">178</span>      state = ScanControllerState.SUSPENDED;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      this.resumer = resumer;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return resumer;<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>    @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    public void terminate() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      preCheck();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      state = ScanControllerState.TERMINATED;<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>    // return the current state, and set the state to DESTROYED.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    ScanControllerState destroy() {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      ScanControllerState state = this.state;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      this.state = ScanControllerState.DESTROYED;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      return state;<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>    public Optional&lt;Cursor&gt; cursor() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return cursor;<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>  private enum ScanResumerState {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  // controller.suspend().resume()<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  // package private methods can only be called within the implementation of<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // INITIALIZED -&gt; RESUMED<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private ScanResponse resp;<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private int numberOfCompleteRows;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // renewal task.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private Timeout leaseRenewer;<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    public void resume() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      ScanResponse localResp;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      int localNumberOfCompleteRows;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      synchronized (this) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          // user calls this method before we call prepare, so just set the state to<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          // RESUMED, the implementation will just go on.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          state = ScanResumerState.RESUMED;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (state == ScanResumerState.RESUMED) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // already resumed, give up.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          return;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        state = ScanResumerState.RESUMED;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (leaseRenewer != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          leaseRenewer.cancel();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        localResp = this.resp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      completeOrNext(localResp, localNumberOfCompleteRows);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    private void scheduleRenewLeaseTask() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      // the scan has already been resumed, give up<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      if (state == ScanResumerState.RESUMED) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      renewLease();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      scheduleRenewLeaseTask();<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 false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    // for more details.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      if (state == ScanResumerState.RESUMED) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        return false;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      state = ScanResumerState.SUSPENDED;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.resp = resp;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // automatically so we do not need to renew lease.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (resp.getMoreResultsInRegion()) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        // schedule renew lease task<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        scheduleRenewLeaseTask();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      }<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><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this.retryTimer = retryTimer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    this.scan = scan;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.scanMetrics = scanMetrics;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    this.scannerId = scannerId;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.resultCache = resultCache;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    this.consumer = consumer;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.stub = stub;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    this.loc = loc;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    this.pauseNs = pauseNs;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    this.maxAttempts = maxAttempts;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (scan.isReversed()) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } else {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    this.exceptions = new ArrayList&lt;&gt;();<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>  private long elapsedMs() {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private long remainingTimeNs() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void completeExceptionally(boolean closeScanner) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    resultCache.clear();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (closeScanner) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      closeScanner();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    future.complete(false);<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 void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    scan.withStartRow(row, inclusive);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    future.complete(true);<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>  private void completeWhenError(boolean closeScanner) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    resultCache.clear();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (closeScanner) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      closeScanner();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (nextStartRowWhenError != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    future.complete(true);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private void onError(Throwable error) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    error = translateException(error);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          " ms",<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        error);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    exceptions.add(qt);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (tries &gt;= maxAttempts) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      completeExceptionally(!scannerClosed);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long delayNs;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    if (scanTimeoutNs &gt; 0) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      if (maxDelayNs &lt;= 0) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        completeExceptionally(!scannerClosed);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        return;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (scannerClosed) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      completeWhenError(false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      completeWhenError(true);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    if (error instanceof DoNotRetryIOException) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      completeExceptionally(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    tries++;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<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 void updateNextStartRowWhenError(Result result) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    nextStartRowWhenError = result.getRow();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    includeNextStartRowWhenError = result.mayHaveMoreCellsInRow();<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>  private void completeWhenNoMoreResultsInRegion() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    if (noMoreResultsForScan(scan, loc.getRegionInfo())) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      completeNoMoreResults();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      completeWithNextStartRow(loc.getRegionInfo().getEndKey(), true);<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>  private void completeReversedWhenNoMoreResultsInRegion() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (noMoreResultsForReverseScan(scan, loc.getRegionInfo())) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      completeNoMoreResults();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      completeWithNextStartRow(loc.getRegionInfo().getStartKey(), false);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private void completeOrNext(ScanResponse resp, int numberOfCompleteRows) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    if (resp.hasMoreResults() &amp;&amp; !resp.getMoreResults()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      // RS tells us there is no more data for the whole scan<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      completeNoMoreResults();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      return;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (scan.getLimit() &gt; 0) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // The RS should have set the moreResults field in ScanResponse to false when we have reached<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // the limit, so we add an assert here.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      int newLimit = scan.getLimit() - numberOfCompleteRows;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      assert newLimit &gt; 0;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      scan.setLimit(newLimit);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // as in 2.0 this value will always be set<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (!resp.getMoreResultsInRegion()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      completeWhenNoMoreResultsInRegion.run();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    next();<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>  private void onComplete(HBaseRpcController controller, ScanResponse resp) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (controller.failed()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      onError(controller.getFailed());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    updateServerSideMetrics(scanMetrics, resp);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    boolean isHeartbeatMessage = resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Result[] results;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    int numberOfCompleteRowsBefore = resultCache.numberOfCompleteRows();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    try {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      Result[] rawResults = ResponseConverter.getResults(controller.cellScanner(), resp);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      updateResultsMetrics(scanMetrics, rawResults, isHeartbeatMessage);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      results = resultCache.addAndGet(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        Optional.ofNullable(rawResults).orElse(ScanResultCache.EMPTY_RESULT_ARRAY),<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        isHeartbeatMessage);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } catch (IOException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // We can not retry here. The server has responded normally and the call sequence has been<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // increased so a new scan with the same call sequence will cause an<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // OutOfOrderScannerNextException. Let the upper layer open a new scanner.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      LOG.warn("decode scan response failed", e);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      completeWhenError(true);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ScanControllerImpl scanController = new ScanControllerImpl();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    if (results.length &gt; 0) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      updateNextStartRowWhenError(results[results.length - 1]);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      consumer.onNext(results, scanController);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    } else if (resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      consumer.onHeartbeat(scanController);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    ScanControllerState state = scanController.destroy();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (state == ScanControllerState.TERMINATED) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      if (resp.getMoreResultsInRegion()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // we have more results in region but user request to stop the scan, so we need to close the<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // scanner explicitly.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        closeScanner();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      completeNoMoreResults();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      return;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    int numberOfCompleteRows = resultCache.numberOfCompleteRows() - numberOfCompleteRowsBefore;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (state == ScanControllerState.SUSPENDED) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (scanController.resumer.prepare(resp, numberOfCompleteRows)) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        return;<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>    completeOrNext(resp, numberOfCompleteRows);<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>  private void call() {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // As we have a call sequence for scan, it is useless to have a different rpc timeout which is<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // less than the scan timeout. If the server does not respond in time(usually this will not<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // happen as we have heartbeat now), we will get an OutOfOrderScannerNextException when<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // resending the next request and the only way to fix this is to close the scanner and open a<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // new one.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    long callTimeoutNs;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    if (scanTimeoutNs &gt; 0) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      long remainingNs = scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      if (remainingNs &lt;= 0) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        completeExceptionally(true);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        return;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      callTimeoutNs = remainingNs;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    } else {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      callTimeoutNs = 0L;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (tries &gt; 1) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      incRPCRetriesMetrics(scanMetrics, regionServerRemote);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    resetController(controller, callTimeoutNs);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    ScanRequest req = RequestConverter.buildScanRequest(scannerId, scan.getCaching(), false,<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      nextCallSeq, false, false, scan.getLimit());<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    stub.scan(controller, req, resp -&gt; onComplete(controller, resp));<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>  private void next() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    nextCallSeq++;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    tries = 1;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    exceptions.clear();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    nextCallStartNs = System.nanoTime();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    call();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  private void renewLease() {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    nextCallSeq++;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    resetController(controller, rpcTimeoutNs);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    ScanRequest req =<a name="line.547"></a>
-<span class="sourceLineNo">548</span>        RequestConverter.buildScanRequest(scannerId, 0, false, nextCallSeq, false, true, -1);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    stub.scan(controller, req, resp -&gt; {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    });<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Now we will also fetch some cells along with the scanner id when opening a scanner, so we also<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * need to process the ScanResponse for the open scanner request. The HBaseRpcController for the<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * open scanner request is also needed because we may have some data in the CellScanner which is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * contained in the controller.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @return {@code true} if we should continue, otherwise {@code false}.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public CompletableFuture&lt;Boolean&gt; start(HBaseRpcController controller,<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      ScanResponse respWhenOpen) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    onComplete(controller, respWhenOpen);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    return future;<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">340</span>  private void closeScanner() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    resetController(controller, rpcTimeoutNs);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    stub.scan(controller, req, resp -&gt; {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (controller.failed()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          controller.getFailed());<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>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  private void completeExceptionally(boolean closeScanner) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    resultCache.clear();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (closeScanner) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      closeScanner();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    future.complete(false);<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>  private void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    scan.withStartRow(row, inclusive);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    future.complete(true);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private void completeWhenError(boolean closeScanner) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    resultCache.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (closeScanner) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      closeScanner();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    if (nextStartRowWhenError != null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    future.complete(true);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private void onError(Throwable error) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    error = translateException(error);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          " ms",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        error);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    exceptions.add(qt);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (tries &gt;= maxAttempts) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      completeExceptionally(!scannerClosed);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      return;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    long delayNs;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (scanTimeoutNs &gt; 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (maxDelayNs &lt;= 0) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        completeExceptionally(!scannerClosed);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        return;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    } else {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (scannerClosed) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      completeWhenError(false);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      completeWhenError(true);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    if (error instanceof DoNotRetryIOException) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      completeExceptionally(true);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    tries++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private void updateNextStartRowWhenError(Result result) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    nextStartRowWhenError = result.getRow();<a name="line.431"></a>
+<span clas

<TRUNCATED>

[37/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index 2ba8e3d..9a49ec0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.231">RSRpcServices</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.228">RSRpcServices</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRPCErrorHandler</a>, org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface, org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.BlockingInterface, <a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>, <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html" title="interface in org.apache.hadoop.hbase.conf">ConfigurationObserver</a></pre>
 <div class="block">Implements the regionserver RPC services.</div>
@@ -890,7 +890,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>protected static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.234">LOG</a></pre>
+<pre>protected static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.231">LOG</a></pre>
 </li>
 </ul>
 <a name="REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS">
@@ -899,7 +899,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.237">REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.234">REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
 <div class="block">RPC scheduler to use for the region server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -913,7 +913,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.245">REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.242">REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
 <div class="block">Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This
  configuration exists to prevent the scenario where a time limit is specified to be so
  restrictive that the time limit is reached immediately (before any cells are scanned).</div>
@@ -929,7 +929,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.250">DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.247">DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
 <div class="block">Default value of <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA"><code>REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</code></a></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -943,7 +943,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_NAME</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.255">BATCH_ROWS_THRESHOLD_NAME</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.252">BATCH_ROWS_THRESHOLD_NAME</a></pre>
 <div class="block">Number of rows in a batch operation above which a warning will be logged.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -957,7 +957,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_DEFAULT</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.259">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.256">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
 <div class="block">Default value of <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#BATCH_ROWS_THRESHOLD_NAME"><code>BATCH_ROWS_THRESHOLD_NAME</code></a></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -971,7 +971,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCount</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.262">requestCount</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.259">requestCount</a></pre>
 </li>
 </ul>
 <a name="rpcGetRequestCount">
@@ -980,7 +980,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcGetRequestCount</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.265">rpcGetRequestCount</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.262">rpcGetRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcScanRequestCount">
@@ -989,7 +989,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcScanRequestCount</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.268">rpcScanRequestCount</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.265">rpcScanRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcMultiRequestCount">
@@ -998,7 +998,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcMultiRequestCount</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.271">rpcMultiRequestCount</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.268">rpcMultiRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcMutateRequestCount">
@@ -1007,7 +1007,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcMutateRequestCount</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.274">rpcMutateRequestCount</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html?is-external=true" title="class or interface in java.util.concurrent.atomic">LongAdder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.271">rpcMutateRequestCount</a></pre>
 </li>
 </ul>
 <a name="rpcServer">
@@ -1016,7 +1016,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcServer</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.277">rpcServer</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.274">rpcServer</a></pre>
 </li>
 </ul>
 <a name="isa">
@@ -1025,7 +1025,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>isa</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.278">isa</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.275">isa</a></pre>
 </li>
 </ul>
 <a name="regionServer">
@@ -1034,7 +1034,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.280">regionServer</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.277">regionServer</a></pre>
 </li>
 </ul>
 <a name="maxScannerResultSize">
@@ -1043,7 +1043,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>maxScannerResultSize</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.281">maxScannerResultSize</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.278">maxScannerResultSize</a></pre>
 </li>
 </ul>
 <a name="priority">
@@ -1052,7 +1052,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>priority</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.284">priority</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.281">priority</a></pre>
 </li>
 </ul>
 <a name="scannerIdGenerator">
@@ -1061,7 +1061,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerIdGenerator</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerIdGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.286">scannerIdGenerator</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerIdGenerator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.283">scannerIdGenerator</a></pre>
 </li>
 </ul>
 <a name="scanners">
@@ -1070,7 +1070,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>scanners</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.287">scanners</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.284">scanners</a></pre>
 </li>
 </ul>
 <a name="closedScanners">
@@ -1079,7 +1079,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>closedScanners</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.291">closedScanners</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.288">closedScanners</a></pre>
 </li>
 </ul>
 <a name="scannerLeaseTimeoutPeriod">
@@ -1088,7 +1088,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerLeaseTimeoutPeriod</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.295">scannerLeaseTimeoutPeriod</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.292">scannerLeaseTimeoutPeriod</a></pre>
 <div class="block">The lease timeout period for client scanners (milliseconds).</div>
 </li>
 </ul>
@@ -1098,7 +1098,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcTimeout</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.300">rpcTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.297">rpcTimeout</a></pre>
 <div class="block">The RPC timeout period (milliseconds)</div>
 </li>
 </ul>
@@ -1108,7 +1108,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>minimumScanTimeLimitDelta</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.305">minimumScanTimeLimitDelta</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.302">minimumScanTimeLimitDelta</a></pre>
 <div class="block">The minimum allowable delta to use for the scan limit</div>
 </li>
 </ul>
@@ -1118,7 +1118,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>rowSizeWarnThreshold</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.310">rowSizeWarnThreshold</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.307">rowSizeWarnThreshold</a></pre>
 <div class="block">Row size threshold for multi requests above which a warning is logged</div>
 </li>
 </ul>
@@ -1128,7 +1128,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCompactionQueues</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/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/regionserver/RSRpcServices.html#line.312">clearCompactionQueues</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/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/regionserver/RSRpcServices.html#line.309">clearCompactionQueues</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_LOG_DELEGATE">
@@ -1137,7 +1137,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LOG_DELEGATE</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1133">DEFAULT_LOG_DELEGATE</a></pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1130">DEFAULT_LOG_DELEGATE</a></pre>
 </li>
 </ul>
 <a name="ld">
@@ -1146,7 +1146,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>ld</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1144">ld</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1141">ld</a></pre>
 </li>
 </ul>
 <a name="SCANNER_ALREADY_CLOSED">
@@ -1156,7 +1156,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <li class="blockList">
 <h4>SCANNER_ALREADY_CLOSED</h4>
 <pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2830">SCANNER_ALREADY_CLOSED</a></pre>
+private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2827">SCANNER_ALREADY_CLOSED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 </li>
 </ul>
@@ -1174,7 +1174,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>RSRpcServices</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1146">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1143">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs)
               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1188,7 +1188,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1151">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1148">RSRpcServices</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;rs,
               <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html" title="interface in org.apache.hadoop.hbase.regionserver">RSRpcServices.LogDelegate</a>&nbsp;ld)
        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1211,7 +1211,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.457">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Result&nbsp;r,
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.454">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Result&nbsp;r,
                                                                                                                      int&nbsp;index)</pre>
 </li>
 </ul>
@@ -1221,7 +1221,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.462">getResultOrException</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.459">getResultOrException</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
                                                                                                                      int&nbsp;index)</pre>
 </li>
 </ul>
@@ -1231,7 +1231,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.466">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
+<pre>private static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.463">getResultOrException</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
                                                                                                                      int&nbsp;index)</pre>
 </li>
 </ul>
@@ -1241,7 +1241,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>startNonceOperation</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.477">startNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.474">startNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                                     long&nbsp;nonceGroup)
                              throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Starts the nonce operation for a mutation, if needed.</div>
@@ -1260,7 +1260,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>endNonceOperation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.496">endNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.493">endNonceOperation</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                                long&nbsp;nonceGroup,
                                boolean&nbsp;success)</pre>
 <div class="block">Ends nonce operation for a mutation, if needed.</div>
@@ -1278,7 +1278,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>isClientCellBlockSupport</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.503">isClientCellBlockSupport</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.500">isClientCellBlockSupport</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</pre>
 </li>
 </ul>
 <a name="addResult-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse.Builder-org.apache.hadoop.hbase.client.Result-org.apache.hadoop.hbase.ipc.HBaseRpcController-boolean-">
@@ -1287,7 +1287,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>addResult</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.507">addResult</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.504">addResult</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse.Builder&nbsp;builder,
                        <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result,
                        <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;rpcc,
                        boolean&nbsp;clientCellBlockSupported)</pre>
@@ -1299,7 +1299,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>addResults</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.519">addResults</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.516">addResults</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder,
                         <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
                         <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                         boolean&nbsp;isDefaultRegion,
@@ -1312,7 +1312,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRows</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.547">mutateRows</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.544">mutateRows</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                         <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
                         <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder)
@@ -1334,7 +1334,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndRowMutate</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.600">checkAndRowMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.597">checkAndRowMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                                   <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
                                   <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
                                   byte[]&nbsp;row,
@@ -1367,7 +1367,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>append</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/RSRpcServices.html#line.656">append</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<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/RSRpcServices.html#line.653">append</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                       <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                       org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                       <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
@@ -1394,7 +1394,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</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/RSRpcServices.html#line.707">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<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/RSRpcServices.html#line.704">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                          <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                          org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                          <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
@@ -1419,7 +1419,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>doNonAtomicRegionMutation</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.763">doNonAtomicRegionMutation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.760">doNonAtomicRegionMutation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                                                       <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction&nbsp;actions,
                                                       <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
@@ -1452,7 +1452,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCellSizeLimit</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.926">checkCellSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.923">checkCellSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                                 <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;m)
                          throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1467,7 +1467,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>doBatchOp</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.953">doBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.950">doBatchOp</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                        <a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.html" title="interface in org.apache.hadoop.hbase.quotas">OperationQuota</a>&nbsp;quota,
                        <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action&gt;&nbsp;mutations,
@@ -1488,7 +1488,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>doReplayBatchOp</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1050">doReplayBatchOp</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1047">doReplayBatchOp</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                                           <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>&gt;&nbsp;mutations,
                                           long&nbsp;replaySeqId)
                                    throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1513,7 +1513,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAllScanners</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1116">closeAllScanners</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1113">closeAllScanners</a>()</pre>
 </li>
 </ul>
 <a name="onConfigurationChange-org.apache.hadoop.conf.Configuration-">
@@ -1522,7 +1522,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1231">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1228">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">ConfigurationObserver</a></code></span></div>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
@@ -1538,7 +1538,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>createPriority</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1237">createPriority</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1234">createPriority</a>()</pre>
 </li>
 </ul>
 <a name="getHostname-org.apache.hadoop.conf.Configuration-boolean-">
@@ -1547,7 +1547,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getHostname</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1241">getHostname</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1238">getHostname</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  boolean&nbsp;isMaster)
                           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl>
@@ -1562,7 +1562,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1257">getScannersCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1254">getScannersCount</a>()</pre>
 </li>
 </ul>
 <a name="getScanner-long-">
@@ -1571,7 +1571,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1262">getScanner</a>(long&nbsp;scannerId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1259">getScanner</a>(long&nbsp;scannerId)</pre>
 </li>
 </ul>
 <a name="getScanDetailsWithId-long-">
@@ -1580,7 +1580,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanDetailsWithId</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1271">getScanDetailsWithId</a>(long&nbsp;scannerId)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1268">getScanDetailsWithId</a>(long&nbsp;scannerId)</pre>
 </li>
 </ul>
 <a name="getScannerVirtualTime-long-">
@@ -1589,7 +1589,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannerVirtualTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1286">getScannerVirtualTime</a>(long&nbsp;scannerId)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1283">getScannerVirtualTime</a>(long&nbsp;scannerId)</pre>
 <div class="block">Get the vtime associated with the scanner.
  Currently the vtime is the number of "next" calls.</div>
 </li>
@@ -1600,7 +1600,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>addSize</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1299">addSize</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context,
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1296">addSize</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context,
                <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;r,
                <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;lastBlock)</pre>
 <div class="block">Method to account for the size of retained cells and retained data blocks.</div>
@@ -1616,7 +1616,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>addScanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1333">addScanner</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannerHolder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1330">addScanner</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
                                                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;s,
                                                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
                                                      boolean&nbsp;needCursor)
@@ -1633,7 +1633,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegion</h4>
-<pre>public&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/RSRpcServices.html#line.1361">getRegion</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)
+<pre>public&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/RSRpcServices.html#line.1358">getRegion</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)
                  throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Find the HRegion based on a region specifier</div>
 <dl>
@@ -1653,7 +1653,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1379">getPriority</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1376">getPriority</a>()</pre>
 </li>
 </ul>
 <a name="getConfiguration--">
@@ -1662,7 +1662,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1384">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1381">getConfiguration</a>()</pre>
 </li>
 </ul>
 <a name="getRpcQuotaManager--">
@@ -1671,7 +1671,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1388">getRpcQuotaManager</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1385">getRpcQuotaManager</a>()</pre>
 </li>
 </ul>
 <a name="getSpaceQuotaManager--">
@@ -1680,7 +1680,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getSpaceQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1392">getSpaceQuotaManager</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1389">getSpaceQuotaManager</a>()</pre>
 </li>
 </ul>
 <a name="start--">
@@ -1689,7 +1689,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1396">start</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1393">start</a>()</pre>
 </li>
 </ul>
 <a name="stop--">
@@ -1698,7 +1698,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1401">stop</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1398">stop</a>()</pre>
 </li>
 </ul>
 <a name="checkOpen--">
@@ -1707,7 +1707,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>checkOpen</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1411">checkOpen</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1408">checkOpen</a>()
                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Called to verify that this server is up and running.</div>
 <dl>
@@ -1722,7 +1722,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getServices</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1430">getServices</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1427">getServices</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>list of blocking services and their security info classes that this server supports</dd>
@@ -1735,7 +1735,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getSocketAddress</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1441">getSocketAddress</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1438">getSocketAddress</a>()</pre>
 </li>
 </ul>
 <a name="getPriority-org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader-org.apache.hadoop.hbase.shaded.com.google.protobuf.Message-org.apache.hadoop.hbase.security.User-">
@@ -1744,7 +1744,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1446">getPriority</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1443">getPriority</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
                        org.apache.hadoop.hbase.shaded.com.google.protobuf.Message&nbsp;param,
                        <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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html#getPriority-org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader-org.apache.hadoop.hbase.shaded.com.google.protobuf.Message-org.apache.hadoop.hbase.security.User-">PriorityFunction</a></code></span></div>
@@ -1764,7 +1764,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeadline</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1451">getDeadline</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1448">getDeadline</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
                         org.apache.hadoop.hbase.shaded.com.google.protobuf.Message&nbsp;param)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html#getDeadline-org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader-org.apache.hadoop.hbase.shaded.com.google.protobuf.Message-">PriorityFunction</a></code></span></div>
 <div class="block">Returns the deadline of the specified request.
@@ -1783,7 +1783,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>checkOOME</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1463">checkOOME</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1460">checkOOME</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html#checkOOME-java.lang.Throwable-">HBaseRPCErrorHandler</a></code></span></div>
 <div class="block">Take actions on the event of an OutOfMemoryError.</div>
 <dl>
@@ -1802,7 +1802,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>exitIfOOME</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1467">exitIfOOME</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1464">exitIfOOME</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 </li>
 </ul>
 <a name="closeRegion-org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest-">
@@ -1811,7 +1811,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1495">closeRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1492">closeRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)
                                                                                               throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Close a region on the region server.</div>
@@ -1832,7 +1832,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>compactRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1536">compactRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1533">compactRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest&nbsp;request)
                                                                                                   throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Compact a region on the region server.</div>
@@ -1853,7 +1853,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>flushRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1604">flushRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1601">flushRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest&nbsp;request)
                                                                                               throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Flush a region on the region server.</div>
@@ -1874,7 +1874,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1646">getOnlineRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1643">getOnlineRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                              org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest&nbsp;request)
                                                                                                       throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -1891,7 +1891,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1665">getRegionInfo</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1662">getRegionInfo</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest&nbsp;request)
                                                                                                   throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -1908,7 +1908,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1705">getRegionLoad</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1702">getRegionLoad</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest&nbsp;request)
                                                                                                   throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -1925,7 +1925,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>clearCompactionQueues</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1733">clearCompactionQueues</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1730">clearCompactionQueues</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest&nbsp;request)
                                                                                                                   throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -1942,7 +1942,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1778">getServerInfo</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1775">getServerInfo</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest&nbsp;request)
                                                                                                   throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Get some information of the region server.</div>
@@ -1963,7 +1963,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFile</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1792">getStoreFile</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1789">getStoreFile</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                        org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest&nbsp;request)
                                                                                                 throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -1980,7 +1980,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>openRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1843">openRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1840">openRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)
                                                                                             throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Open asynchronously a region or a set of regions on the region server.
@@ -2018,7 +2018,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>warmupRegion</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2014">warmupRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2011">warmupRegion</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                        org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest&nbsp;request)
                                                                                                 throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Wamrmup a region on this server.
@@ -2043,7 +2043,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>replay</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2065">replay</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2062">replay</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
                                                                                                throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Replay the given changes when distributedLogReplay WAL edits from a failed RS. The guarantee is
@@ -2066,7 +2066,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2155">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2152">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 </li>
 </ul>
 <a name="replicateWALEntry-org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">
@@ -2075,7 +2075,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>replicateWALEntry</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2168">replicateWALEntry</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2165">replicateWALEntry</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
                                                                                                           throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Replicate WAL entries on the region server.</div>
@@ -2096,7 +2096,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWALWriter</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2197">rollWALWriter</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2194">rollWALWriter</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest&nbsp;request)
                                                                                                   throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Roll the WAL writer of the region server.</div>
@@ -2117,7 +2117,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2222">stopServer</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.2219">stopServer</a>(org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                    org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest&nbsp;request)
                                                                                             throws org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException</pre>
 <div class="block">Stop the region server.</div>
@@ -2138,7 +2138,7 @@ private static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>updateFavoredNodes</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse&nbsp;<a href="../.

<TRUNCATED>

[42/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
index ad70112..e6bc892 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.144">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.145">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></pre>
 </li>
@@ -143,10 +143,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#callerThread">callerThread</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#cursor">cursor</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#resumer">resumer</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#state">state</a></span></code>&nbsp;</td>
 </tr>
@@ -162,12 +166,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
 <caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
-<th class="colFirst" scope="col">Modifier</th>
-<th class="colLast" scope="col">Constructor and Description</th>
+<th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#ScanControllerImpl--">ScanControllerImpl</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#ScanControllerImpl-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse-">ScanControllerImpl</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;resp)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -185,20 +187,26 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#cursor--">cursor</a></span>()</code>
+<div class="block">Get the scan cursor if available.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#destroy--">destroy</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#preCheck--">preCheck</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#suspend--">suspend</a></span>()</code>
 <div class="block">Suspend the scan.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#terminate--">terminate</a></span>()</code>
 <div class="block">Terminate the scan.</div>
@@ -232,7 +240,16 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>callerThread</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.147">callerThread</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.148">callerThread</a></pre>
+</li>
+</ul>
+<a name="cursor">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cursor</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.150">cursor</a></pre>
 </li>
 </ul>
 <a name="state">
@@ -241,7 +258,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>state</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.153">state</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.156">state</a></pre>
 </li>
 </ul>
 <a name="resumer">
@@ -250,7 +267,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resumer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.155">resumer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.158">resumer</a></pre>
 </li>
 </ul>
 </li>
@@ -261,13 +278,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="ScanControllerImpl--">
+<a name="ScanControllerImpl-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScanControllerImpl</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.144">ScanControllerImpl</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.160">ScanControllerImpl</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;resp)</pre>
 </li>
 </ul>
 </li>
@@ -284,7 +301,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>preCheck</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.157">preCheck</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.166">preCheck</a>()</pre>
 </li>
 </ul>
 <a name="suspend--">
@@ -293,7 +310,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>suspend</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.167">suspend</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.176">suspend</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#suspend--">RawScanResultConsumer.ScanController</a></code></span></div>
 <div class="block">Suspend the scan.
  <p>
@@ -313,7 +330,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>terminate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.176">terminate</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.185">terminate</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#terminate--">RawScanResultConsumer.ScanController</a></code></span></div>
 <div class="block">Terminate the scan.
  <p>
@@ -328,10 +345,27 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <a name="destroy--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>destroy</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.182">destroy</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.191">destroy</a>()</pre>
+</li>
+</ul>
+<a name="cursor--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>cursor</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#line.198">cursor</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">RawScanResultConsumer.ScanController</a></code></span></div>
+<div class="block">Get the scan cursor if available.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">cursor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The scan cursor.</dd>
+</dl>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
index 3cd1185..00819bf 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.123">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>
+<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.124">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>&gt;</pre>
 </li>
 </ul>
@@ -216,7 +216,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>INITIALIZED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.124">INITIALIZED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.125">INITIALIZED</a></pre>
 </li>
 </ul>
 <a name="SUSPENDED">
@@ -225,7 +225,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SUSPENDED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.124">SUSPENDED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.125">SUSPENDED</a></pre>
 </li>
 </ul>
 <a name="TERMINATED">
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>TERMINATED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.124">TERMINATED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.125">TERMINATED</a></pre>
 </li>
 </ul>
 <a name="DESTROYED">
@@ -243,7 +243,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DESTROYED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.124">DESTROYED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.125">DESTROYED</a></pre>
 </li>
 </ul>
 </li>
@@ -260,7 +260,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/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.123">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.124">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:
@@ -280,7 +280,7 @@ for (AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState c : AsyncScanSin
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.123">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#line.124">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
index ae1745b..a8cc553 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.206">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.220">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a></pre>
 </li>
@@ -235,7 +235,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>state</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.210">state</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.224">state</a></pre>
 </li>
 </ul>
 <a name="resp">
@@ -244,7 +244,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>resp</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.212">resp</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.226">resp</a></pre>
 </li>
 </ul>
 <a name="numberOfCompleteRows">
@@ -253,7 +253,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>numberOfCompleteRows</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.214">numberOfCompleteRows</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.228">numberOfCompleteRows</a></pre>
 </li>
 </ul>
 <a name="leaseRenewer">
@@ -262,7 +262,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockListLast">
 <li class="blockList">
 <h4>leaseRenewer</h4>
-<pre>private&nbsp;io.netty.util.Timeout <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.222">leaseRenewer</a></pre>
+<pre>private&nbsp;io.netty.util.Timeout <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.236">leaseRenewer</a></pre>
 </li>
 </ul>
 </li>
@@ -279,7 +279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScanResumerImpl</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.206">ScanResumerImpl</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.220">ScanResumerImpl</a>()</pre>
 </li>
 </ul>
 </li>
@@ -296,7 +296,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>resume</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.225">resume</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.239">resume</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html#resume--">RawScanResultConsumer.ScanResumer</a></code></span></div>
 <div class="block">Resume the scan. You are free to call it multiple time but only the first call will take
  effect.</div>
@@ -312,7 +312,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>scheduleRenewLeaseTask</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.253">scheduleRenewLeaseTask</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.267">scheduleRenewLeaseTask</a>()</pre>
 </li>
 </ul>
 <a name="tryRenewLease--">
@@ -321,7 +321,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockList">
 <li class="blockList">
 <h4>tryRenewLease</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.258">tryRenewLease</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.272">tryRenewLease</a>()</pre>
 </li>
 </ul>
 <a name="prepare-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse-int-">
@@ -330,7 +330,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultC
 <ul class="blockListLast">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.270">prepare</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;resp,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerImpl.html#line.284">prepare</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;resp,
                 int&nbsp;numberOfCompleteRows)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
index 17cb2be..a36987b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.189">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a>
+<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.203">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a>&gt;</pre>
 </li>
 </ul>
@@ -213,7 +213,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>INITIALIZED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.190">INITIALIZED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.204">INITIALIZED</a></pre>
 </li>
 </ul>
 <a name="SUSPENDED">
@@ -222,7 +222,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SUSPENDED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.190">SUSPENDED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.204">SUSPENDED</a></pre>
 </li>
 </ul>
 <a name="RESUMED">
@@ -231,7 +231,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RESUMED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.190">RESUMED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.204">RESUMED</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.189">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.203">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -268,7 +268,7 @@ for (AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState c : AsyncScanSingle
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.189">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html#line.203">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
index 5f7165b..b1adc03 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.71">AsyncScanSingleRegionRpcRetryingCaller</a>
+class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.72">AsyncScanSingleRegionRpcRetryingCaller</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Retry caller for scanning a region.
  <p>
@@ -415,7 +415,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.73">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.74">LOG</a></pre>
 </li>
 </ul>
 <a name="retryTimer">
@@ -424,7 +424,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>retryTimer</h4>
-<pre>private final&nbsp;io.netty.util.HashedWheelTimer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.75">retryTimer</a></pre>
+<pre>private final&nbsp;io.netty.util.HashedWheelTimer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.76">retryTimer</a></pre>
 </li>
 </ul>
 <a name="scan">
@@ -433,7 +433,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.77">scan</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.78">scan</a></pre>
 </li>
 </ul>
 <a name="scanMetrics">
@@ -442,7 +442,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scanMetrics</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.79">scanMetrics</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.80">scanMetrics</a></pre>
 </li>
 </ul>
 <a name="scannerId">
@@ -451,7 +451,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerId</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.81">scannerId</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.82">scannerId</a></pre>
 </li>
 </ul>
 <a name="resultCache">
@@ -460,7 +460,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>resultCache</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScanResultCache.html" title="interface in org.apache.hadoop.hbase.client">ScanResultCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.83">resultCache</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ScanResultCache.html" title="interface in org.apache.hadoop.hbase.client">ScanResultCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.84">resultCache</a></pre>
 </li>
 </ul>
 <a name="consumer">
@@ -469,7 +469,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>consumer</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.85">consumer</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.86">consumer</a></pre>
 </li>
 </ul>
 <a name="stub">
@@ -478,7 +478,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>stub</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.87">stub</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.88">stub</a></pre>
 </li>
 </ul>
 <a name="loc">
@@ -487,7 +487,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>loc</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.89">loc</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.90">loc</a></pre>
 </li>
 </ul>
 <a name="regionServerRemote">
@@ -496,7 +496,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerRemote</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.91">regionServerRemote</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.92">regionServerRemote</a></pre>
 </li>
 </ul>
 <a name="scannerLeaseTimeoutPeriodNs">
@@ -505,7 +505,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerLeaseTimeoutPeriodNs</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.93">scannerLeaseTimeoutPeriodNs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.94">scannerLeaseTimeoutPeriodNs</a></pre>
 </li>
 </ul>
 <a name="pauseNs">
@@ -514,7 +514,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>pauseNs</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.95">pauseNs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.96">pauseNs</a></pre>
 </li>
 </ul>
 <a name="maxAttempts">
@@ -523,7 +523,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>maxAttempts</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.97">maxAttempts</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.98">maxAttempts</a></pre>
 </li>
 </ul>
 <a name="scanTimeoutNs">
@@ -532,7 +532,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scanTimeoutNs</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.99">scanTimeoutNs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.100">scanTimeoutNs</a></pre>
 </li>
 </ul>
 <a name="rpcTimeoutNs">
@@ -541,7 +541,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcTimeoutNs</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.101">rpcTimeoutNs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.102">rpcTimeoutNs</a></pre>
 </li>
 </ul>
 <a name="startLogErrorsCnt">
@@ -550,7 +550,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>startLogErrorsCnt</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.103">startLogErrorsCnt</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.104">startLogErrorsCnt</a></pre>
 </li>
 </ul>
 <a name="completeWhenNoMoreResultsInRegion">
@@ -559,7 +559,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeWhenNoMoreResultsInRegion</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.105">completeWhenNoMoreResultsInRegion</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.106">completeWhenNoMoreResultsInRegion</a></pre>
 </li>
 </ul>
 <a name="future">
@@ -568,7 +568,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>future</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.107">future</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.108">future</a></pre>
 </li>
 </ul>
 <a name="controller">
@@ -577,7 +577,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>controller</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.109">controller</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.110">controller</a></pre>
 </li>
 </ul>
 <a name="nextStartRowWhenError">
@@ -586,7 +586,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextStartRowWhenError</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.111">nextStartRowWhenError</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.112">nextStartRowWhenError</a></pre>
 </li>
 </ul>
 <a name="includeNextStartRowWhenError">
@@ -595,7 +595,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>includeNextStartRowWhenError</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.113">includeNextStartRowWhenError</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.114">includeNextStartRowWhenError</a></pre>
 </li>
 </ul>
 <a name="nextCallStartNs">
@@ -604,7 +604,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextCallStartNs</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.115">nextCallStartNs</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.116">nextCallStartNs</a></pre>
 </li>
 </ul>
 <a name="tries">
@@ -613,7 +613,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tries</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.117">tries</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.118">tries</a></pre>
 </li>
 </ul>
 <a name="exceptions">
@@ -622,7 +622,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>exceptions</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RetriesExhaustedException.ThrowableWithExtraContext.html" title="class in org.apache.hadoop.hbase.client">RetriesExhaustedException.ThrowableWithExtraContext</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.119">exceptions</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RetriesExhaustedException.ThrowableWithExtraContext.html" title="class in org.apache.hadoop.hbase.client">RetriesExhaustedException.ThrowableWithExtraContext</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.120">exceptions</a></pre>
 </li>
 </ul>
 <a name="nextCallSeq">
@@ -631,7 +631,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nextCallSeq</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.121">nextCallSeq</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.122">nextCallSeq</a></pre>
 </li>
 </ul>
 </li>
@@ -648,7 +648,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncScanSingleRegionRpcRetryingCaller</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.288">AsyncScanSingleRegionRpcRetryingCaller</a>(io.netty.util.HashedWheelTimer&nbsp;retryTimer,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.302">AsyncScanSingleRegionRpcRetryingCaller</a>(io.netty.util.HashedWheelTimer&nbsp;retryTimer,
                                               <a href="../../../../../org/apache/hadoop/hbase/client/AsyncConnectionImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncConnectionImpl</a>&nbsp;conn,
                                               <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                                               <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
@@ -680,7 +680,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>elapsedMs</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.318">elapsedMs</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.332">elapsedMs</a>()</pre>
 </li>
 </ul>
 <a name="remainingTimeNs--">
@@ -689,7 +689,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>remainingTimeNs</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.322">remainingTimeNs</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.336">remainingTimeNs</a>()</pre>
 </li>
 </ul>
 <a name="closeScanner--">
@@ -698,7 +698,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>closeScanner</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.326">closeScanner</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.340">closeScanner</a>()</pre>
 </li>
 </ul>
 <a name="completeExceptionally-boolean-">
@@ -707,7 +707,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeExceptionally</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.340">completeExceptionally</a>(boolean&nbsp;closeScanner)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.354">completeExceptionally</a>(boolean&nbsp;closeScanner)</pre>
 </li>
 </ul>
 <a name="completeNoMoreResults--">
@@ -716,7 +716,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeNoMoreResults</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.348">completeNoMoreResults</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.362">completeNoMoreResults</a>()</pre>
 </li>
 </ul>
 <a name="completeWithNextStartRow-byte:A-boolean-">
@@ -725,7 +725,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeWithNextStartRow</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.352">completeWithNextStartRow</a>(byte[]&nbsp;row,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.366">completeWithNextStartRow</a>(byte[]&nbsp;row,
                                       boolean&nbsp;inclusive)</pre>
 </li>
 </ul>
@@ -735,7 +735,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeWhenError</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.357">completeWhenError</a>(boolean&nbsp;closeScanner)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.371">completeWhenError</a>(boolean&nbsp;closeScanner)</pre>
 </li>
 </ul>
 <a name="onError-java.lang.Throwable-">
@@ -744,7 +744,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>onError</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.369">onError</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.383">onError</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 </li>
 </ul>
 <a name="updateNextStartRowWhenError-org.apache.hadoop.hbase.client.Result-">
@@ -753,7 +753,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>updateNextStartRowWhenError</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.416">updateNextStartRowWhenError</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.430">updateNextStartRowWhenError</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</pre>
 </li>
 </ul>
 <a name="completeWhenNoMoreResultsInRegion--">
@@ -762,7 +762,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeWhenNoMoreResultsInRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.421">completeWhenNoMoreResultsInRegion</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.435">completeWhenNoMoreResultsInRegion</a>()</pre>
 </li>
 </ul>
 <a name="completeReversedWhenNoMoreResultsInRegion--">
@@ -771,7 +771,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeReversedWhenNoMoreResultsInRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.429">completeReversedWhenNoMoreResultsInRegion</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.443">completeReversedWhenNoMoreResultsInRegion</a>()</pre>
 </li>
 </ul>
 <a name="completeOrNext-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse-int-">
@@ -780,7 +780,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>completeOrNext</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.437">completeOrNext</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;resp,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.451">completeOrNext</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;resp,
                             int&nbsp;numberOfCompleteRows)</pre>
 </li>
 </ul>
@@ -790,7 +790,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>onComplete</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.458">onComplete</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.472">onComplete</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;resp)</pre>
 </li>
 </ul>
@@ -800,7 +800,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>call</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.508">call</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.522">call</a>()</pre>
 </li>
 </ul>
 <a name="next--">
@@ -809,7 +809,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.535">next</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.549">next</a>()</pre>
 </li>
 </ul>
 <a name="renewLease--">
@@ -818,7 +818,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>renewLease</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.543">renewLease</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.557">renewLease</a>()</pre>
 </li>
 </ul>
 <a name="start-org.apache.hadoop.hbase.ipc.HBaseRpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse-">
@@ -827,7 +827,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.560">start</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html?is-external=true" title="class or interface in java.util.concurrent">CompletableFuture</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.html#line.574">start</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRpcController.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRpcController</a>&nbsp;controller,
                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse&nbsp;respWhenOpen)</pre>
 <div class="block">Now we will also fetch some cells along with the scanner id when opening a scanner, so we also
  need to process the ScanResponse for the open scanner request. The HBaseRpcController for the

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html b/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
index 48010ac..291b96c 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6};
+var methods = {"i0":6,"i1":6,"i2":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -110,15 +110,15 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Public</a>
-public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.60">RawScanResultConsumer.ScanController</a></pre>
-<div class="block">Used to suspend or stop a scan.
+public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.62">RawScanResultConsumer.ScanController</a></pre>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.
  <p>
- Notice that, you should only call the methods below inside onNext or onHeartbeat method. A
- IllegalStateException will be thrown if you call them at other places.
+ Notice that, you should only call the <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#suspend--"><code>suspend()</code></a> or <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#terminate--"><code>terminate()</code></a> inside onNext
+ or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.
  <p>
- You can only call one of the methods below, i.e., call suspend or terminate(of course you are
- free to not call them both), and the methods are not reentrant. A IllegalStateException will be
- thrown if you have already called one of the methods.</div>
+ You can only call one of the <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#suspend--"><code>suspend()</code></a> and <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#terminate--"><code>terminate()</code></a> methods(of course you
+ are free to not call them both), and the methods are not reentrant. An IllegalStateException
+ will be thrown if you have already called one of the methods.</div>
 </li>
 </ul>
 </div>
@@ -138,12 +138,18 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">cursor</a></span>()</code>
+<div class="block">Get the scan cursor if available.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#suspend--">suspend</a></span>()</code>
 <div class="block">Suspend the scan.</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#terminate--">terminate</a></span>()</code>
 <div class="block">Terminate the scan.</div>
@@ -170,7 +176,7 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <ul class="blockList">
 <li class="blockList">
 <h4>suspend</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.69">suspend</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.71">suspend</a>()</pre>
 <div class="block">Suspend the scan.
  <p>
  This means we will stop fetching data in background, i.e., will not call onNext any more
@@ -184,16 +190,30 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <a name="terminate--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>terminate</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.77">terminate</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.79">terminate</a>()</pre>
 <div class="block">Terminate the scan.
  <p>
  This is useful when you have got enough results and want to stop the scan in onNext method,
  or you want to stop the scan in onHeartbeat method because it has spent too many time.</div>
 </li>
 </ul>
+<a name="cursor--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>cursor</h4>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.85">cursor</a>()</pre>
+<div class="block">Get the scan cursor if available.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The scan cursor.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
index f7f5bb4..c66b825 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Public</a>
-public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.40">RawScanResultConsumer.ScanResumer</a></pre>
+public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.42">RawScanResultConsumer.ScanResumer</a></pre>
 <div class="block">Used to resume a scan.</div>
 </li>
 </ul>
@@ -157,7 +157,7 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resume</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html#line.46">resume</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html#line.48">resume</a>()</pre>
 <div class="block">Resume the scan. You are free to call it multiple time but only the first call will take
  effect.</div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html b/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
index d66f185..c783528 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
@@ -106,7 +106,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Public</a>
-public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.34">RawScanResultConsumer</a></pre>
+public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.36">RawScanResultConsumer</a></pre>
 <div class="block">Receives <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><code>Result</code></a> for an asynchronous scan.
  <p>
  Notice that, the <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html#onNext-org.apache.hadoop.hbase.client.Result:A-org.apache.hadoop.hbase.client.RawScanResultConsumer.ScanController-"><code>onNext(Result[], ScanController)</code></a> method will be called in the thread
@@ -135,7 +135,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <tr class="altColor">
 <td class="colFirst"><code>static interface&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></span></code>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -214,7 +214,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onNext</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.87">onNext</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;results,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.95">onNext</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;results,
             <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>&nbsp;controller)</pre>
 <div class="block">Indicate that we have receive some data.</div>
 <dl>
@@ -232,7 +232,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onHeartbeat</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.98">onHeartbeat</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>&nbsp;controller)</pre>
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.106">onHeartbeat</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>&nbsp;controller)</pre>
 <div class="block">Indicate that there is an heartbeat message but we have not cumulated enough cells to call
  onNext.
  <p>
@@ -251,7 +251,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.106">onError</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.114">onError</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 <div class="block">Indicate that we hit an unrecoverable error and the scan operation is terminated.
  <p>
  We will not call <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html#onComplete--"><code>onComplete()</code></a> after calling <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html#onError-java.lang.Throwable-"><code>onError(Throwable)</code></a>.</div>
@@ -263,7 +263,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onComplete</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.111">onComplete</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.119">onComplete</a>()</pre>
 <div class="block">Indicate that the scan operation is completed normally.</div>
 </li>
 </ul>
@@ -273,7 +273,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onScanMetricsCreated</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.119">onScanMetricsCreated</a>(<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics)</pre>
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.127">onScanMetricsCreated</a>(<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics)</pre>
 <div class="block">If <code>scan.isScanMetricsEnabled()</code> returns true, then this method will be called prior to
  all other methods in this interface to give you the <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics"><code>ScanMetrics</code></a> instance for this scan
  operation. The <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics"><code>ScanMetrics</code></a> instance will be updated on-the-fly during the scan, you can


[05/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html
new file mode 100644
index 0000000..32aed9d
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html
@@ -0,0 +1,619 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>AbstractTestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="AbstractTestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":9,"i5":9,"i6":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AbstractTestScanCursor.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/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.client</div>
+<h2 title="Class AbstractTestScanCursor" class="title">Class AbstractTestScanCursor</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.client.AbstractTestScanCursor</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a>, <a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.40">AbstractTestScanCursor</a>
+extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static byte[][]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILIES">FAMILIES</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILY">FAMILY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_FAMILIES">NUM_FAMILIES</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_ROWS">NUM_ROWS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIER">QUALIFIER</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static byte[][]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIERS">QUALIFIERS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROW">ROW</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static byte[][]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROWS">ROWS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TABLE_NAME">TABLE_NAME</a></span></code>
+<div class="block">Table configuration</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TIMEOUT">TIMEOUT</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE">VALUE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE_SIZE">VALUE_SIZE</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#AbstractTestScanCursor--">AbstractTestScanCursor</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Put&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">createPuts</a></span>(byte[][]&nbsp;rows,
+          byte[][]&nbsp;families,
+          byte[][]&nbsp;qualifiers,
+          byte[]&nbsp;value)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.client.Scan</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createReversedScanWithSparseFilter--">createReversedScanWithSparseFilter</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.client.Scan</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSizeLimit--">createScanWithSizeLimit</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.client.Scan</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSparseFilter--">createScanWithSparseFilter</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>private static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createTestTable-org.apache.hadoop.hbase.TableName-byte:A:A-byte:A:A-byte:A:A-byte:A-">createTestTable</a></span>(org.apache.hadoop.hbase.TableName&nbsp;name,
+               byte[][]&nbsp;rows,
+               byte[][]&nbsp;families,
+               byte[][]&nbsp;qualifiers,
+               byte[]&nbsp;cellValue)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/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/8/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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="TEST_UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TEST_UTIL</h4>
+<pre>protected static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.42">TEST_UTIL</a></pre>
+</li>
+</ul>
+<a name="TABLE_NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TABLE_NAME</h4>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.47">TABLE_NAME</a></pre>
+<div class="block">Table configuration</div>
+</li>
+</ul>
+<a name="NUM_ROWS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NUM_ROWS</h4>
+<pre>protected static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.49">NUM_ROWS</a></pre>
+</li>
+</ul>
+<a name="ROW">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ROW</h4>
+<pre>protected static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.50">ROW</a></pre>
+</li>
+</ul>
+<a name="ROWS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ROWS</h4>
+<pre>protected static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.51">ROWS</a></pre>
+</li>
+</ul>
+<a name="NUM_FAMILIES">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NUM_FAMILIES</h4>
+<pre>protected static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.53">NUM_FAMILIES</a></pre>
+</li>
+</ul>
+<a name="FAMILY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FAMILY</h4>
+<pre>protected static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.54">FAMILY</a></pre>
+</li>
+</ul>
+<a name="FAMILIES">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FAMILIES</h4>
+<pre>protected static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.55">FAMILIES</a></pre>
+</li>
+</ul>
+<a name="NUM_QUALIFIERS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NUM_QUALIFIERS</h4>
+<pre>protected static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.57">NUM_QUALIFIERS</a></pre>
+</li>
+</ul>
+<a name="QUALIFIER">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>QUALIFIER</h4>
+<pre>protected static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.58">QUALIFIER</a></pre>
+</li>
+</ul>
+<a name="QUALIFIERS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>QUALIFIERS</h4>
+<pre>protected static&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.59">QUALIFIERS</a></pre>
+</li>
+</ul>
+<a name="VALUE_SIZE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>VALUE_SIZE</h4>
+<pre>protected static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.61">VALUE_SIZE</a></pre>
+</li>
+</ul>
+<a name="VALUE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>VALUE</h4>
+<pre>protected static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.62">VALUE</a></pre>
+</li>
+</ul>
+<a name="TIMEOUT">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TIMEOUT</h4>
+<pre>protected static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.64">TIMEOUT</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.AbstractTestScanCursor.TIMEOUT">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="AbstractTestScanCursor--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AbstractTestScanCursor</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.40">AbstractTestScanCursor</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="setUpBeforeClass--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUpBeforeClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.67">setUpBeforeClass</a>()
+                             throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="createTestTable-org.apache.hadoop.hbase.TableName-byte:A:A-byte:A:A-byte:A:A-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createTestTable</h4>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.80">createTestTable</a>(org.apache.hadoop.hbase.TableName&nbsp;name,
+                                    byte[][]&nbsp;rows,
+                                    byte[][]&nbsp;families,
+                                    byte[][]&nbsp;qualifiers,
+                                    byte[]&nbsp;cellValue)
+                             throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createPuts</h4>
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Put&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.85">createPuts</a>(byte[][]&nbsp;rows,
+                                                                   byte[][]&nbsp;families,
+                                                                   byte[][]&nbsp;qualifiers,
+                                                                   byte[]&nbsp;value)
+                                                            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDownAfterClass--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDownAfterClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.102">tearDownAfterClass</a>()
+                               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="createScanWithSparseFilter--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createScanWithSparseFilter</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.Scan&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.132">createScanWithSparseFilter</a>()</pre>
+</li>
+</ul>
+<a name="createReversedScanWithSparseFilter--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createReversedScanWithSparseFilter</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.Scan&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.137">createReversedScanWithSparseFilter</a>()</pre>
+</li>
+</ul>
+<a name="createScanWithSizeLimit--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>createScanWithSizeLimit</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.Scan&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#line.143">createScanWithSizeLimit</a>()</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>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/AbstractTestScanCursor.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/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestShell.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestShell.html b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestShell.html
index d22c021..993047a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestShell.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/AbstractTestShell.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -302,7 +302,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.CompactorStoreScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.CompactorStoreScanner.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.CompactorStoreScanner.html
index 37ee828..af15358 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.CompactorStoreScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.CompactorStoreScanner.html
@@ -151,7 +151,7 @@ extends org.apache.hadoop.hbase.regionserver.StoreScanner</pre>
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.StoreScanner</h3>
-<code>DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
+<code>DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, prevCell, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide.ExceptionInReseekRegionObserver.MyStoreScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide.ExceptionInReseekRegionObserver.MyStoreScanner.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide.ExceptionInReseekRegionObserver.MyStoreScanner.html
index a5c8fa4..6df5e5b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide.ExceptionInReseekRegionObserver.MyStoreScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestFromClientSide.ExceptionInReseekRegionObserver.MyStoreScanner.html
@@ -151,7 +151,7 @@ extends org.apache.hadoop.hbase.regionserver.StoreScanner</pre>
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.StoreScanner</h3>
-<code>DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
+<code>DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, heap, prevCell, readPt, store, STORESCANNER_PARALLEL_SEEK_ENABLE, STORESCANNER_PREAD_MAX_BYTES</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestPutWriteToWal.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestPutWriteToWal.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestPutWriteToWal.html
index 4a7e5e3..7dee453 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestPutWriteToWal.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestPutWriteToWal.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestPutWriteToWal.html" target="_top">Frames</a></li>
@@ -232,7 +232,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestPutWriteToWal.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html
new file mode 100644
index 0000000..1ccc154
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestRawAsyncScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestRawAsyncScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRawAsyncScanCursor.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/client/TestPutWriteToWal.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestRawAsyncScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">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.client</div>
+<h2 title="Class TestRawAsyncScanCursor" class="title">Class TestRawAsyncScanCursor</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client.AbstractTestScanCursor</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.client.TestRawAsyncScanCursor</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#line.34">TestRawAsyncScanCursor</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></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.client.AbstractTestScanCursor">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></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.client.AbstractTestScanCursor">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILIES">FAMILIES</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILY">FAMILY</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_FAMILIES">NUM_FAMILIES</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_ROWS">NUM_ROWS</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIER">QUALIFIER</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIERS">QUALIFIERS</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROW">ROW</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROWS">ROWS</a>, <a href="../../../../../
 org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TABLE_NAME">TABLE_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TEST_UTIL">TEST_UTIL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TIMEOUT">TIMEOUT</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE">VALUE</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE_SIZE">VALUE_SIZE</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#TestRawAsyncScanCursor--">TestRawAsyncScanCursor</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#doTest-boolean-">doTest</a></span>(boolean&nbsp;reversed)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#testHeartbeatWithSparseFilter--">testHeartbeatWithSparseFilter</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#testHeartbeatWithSparseFilterReversed--">testHeartbeatWithSparseFilterReversed</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createReversedScanWithSparseFilter--">createReversedScanWithSparseFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSizeLimit--">createScanWithSizeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSparseFilter--">createScanWithSparseFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#setUpBeforeClass--">setUpBeforeClass</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#tearDownAfterClass--">tearDownAfterClass</a></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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/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/8/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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestRawAsyncScanCursor--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestRawAsyncScanCursor</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#line.34">TestRawAsyncScanCursor</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="doTest-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>doTest</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#line.36">doTest</a>(boolean&nbsp;reversed)
+             throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
+                    <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a>,
+                    <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></code></dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testHeartbeatWithSparseFilter--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testHeartbeatWithSparseFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#line.97">testHeartbeatWithSparseFilter</a>()
+                                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                                          <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
+                                          <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testHeartbeatWithSparseFilterReversed--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testHeartbeatWithSparseFilterReversed</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#line.103">testHeartbeatWithSparseFilterReversed</a>()
+                                           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                                                  <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
+                                                  <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutionException.html?is-external=true" title="class or interface in java.util.concurrent">ExecutionException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestRawAsyncScanCursor.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/client/TestPutWriteToWal.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestRawAsyncScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">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;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html
index 473bf76..6440291 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWriteToWal.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -467,7 +467,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestPutWriteToWal.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html
index 0c60ed9..899b5ff 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestScan.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.StaticRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestScan.html" target="_top">Frames</a></li>
@@ -302,7 +302,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.StaticRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestScan.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestScanCursor.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestScanCursor.html
new file mode 100644
index 0000000..310b9d3
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestScanCursor.html
@@ -0,0 +1,355 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestScanCursor.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/client/TestScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">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.client</div>
+<h2 title="Class TestScanCursor" class="title">Class TestScanCursor</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">org.apache.hadoop.hbase.client.AbstractTestScanCursor</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.client.TestScanCursor</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScanCursor.html#line.29">TestScanCursor</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></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.client.AbstractTestScanCursor">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></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.client.AbstractTestScanCursor">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILIES">FAMILIES</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILY">FAMILY</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_FAMILIES">NUM_FAMILIES</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_ROWS">NUM_ROWS</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIER">QUALIFIER</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIERS">QUALIFIERS</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROW">ROW</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROWS">ROWS</a>, <a href="../../../../../
 org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TABLE_NAME">TABLE_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TEST_UTIL">TEST_UTIL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TIMEOUT">TIMEOUT</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE">VALUE</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE_SIZE">VALUE_SIZE</a></code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html#TestScanCursor--">TestScanCursor</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html#testHeartbeatWithSparseFilter--">testHeartbeatWithSparseFilter</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html#testHeartbeatWithSparseFilterReversed--">testHeartbeatWithSparseFilterReversed</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html#testSizeLimit--">testSizeLimit</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createReversedScanWithSparseFilter--">createReversedScanWithSparseFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSizeLimit--">createScanWithSizeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSparseFilter--">createScanWithSparseFilter</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#setUpBeforeClass--">setUpBeforeClass</a>, <a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#tearDownAfterClass--">tearDownAfterClass</a></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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/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/8/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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestScanCursor--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestScanCursor</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScanCursor.html#line.29">TestScanCursor</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="testHeartbeatWithSparseFilter--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testHeartbeatWithSparseFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScanCursor.html#line.32">testHeartbeatWithSparseFilter</a>()
+                                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testHeartbeatWithSparseFilterReversed--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testHeartbeatWithSparseFilterReversed</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScanCursor.html#line.52">testHeartbeatWithSparseFilterReversed</a>()
+                                           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testSizeLimit--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testSizeLimit</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestScanCursor.html#line.72">testSizeLimit</a>()
+                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestScanCursor.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/client/TestScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/client/TestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.client.AbstractTestScanCursor">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;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
index 6f16bcd..13e09a8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestScannersFromClientSide.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide2.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -733,7 +733,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide2.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">


[09/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 659b23a..ab78e5fff 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -336,7 +336,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index 97e6cb3..fef2be0 100644
--- a/hbase-annotations/checkstyle.html
+++ b/hbase-annotations/checkstyle.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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -273,7 +273,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependencies.html b/hbase-annotations/dependencies.html
index 86454c0..e17b574 100644
--- a/hbase-annotations/dependencies.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -377,7 +377,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-convergence.html b/hbase-annotations/dependency-convergence.html
index 1367ecf..24bd9d6 100644
--- a/hbase-annotations/dependency-convergence.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -552,7 +552,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-info.html b/hbase-annotations/dependency-info.html
index 98ecd19..87ec805 100644
--- a/hbase-annotations/dependency-info.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-management.html b/hbase-annotations/dependency-management.html
index 3dd6d47..33b0000 100644
--- a/hbase-annotations/dependency-management.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/index.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/index.html b/hbase-annotations/index.html
index 1d9876e..f0359d2 100644
--- a/hbase-annotations/index.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index f448470..0f737a6 100644
--- a/hbase-annotations/integration.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/issue-tracking.html b/hbase-annotations/issue-tracking.html
index a8d58c7..dc95b91 100644
--- a/hbase-annotations/issue-tracking.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/license.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/license.html b/hbase-annotations/license.html
index a9d4dc8..c349cf3 100644
--- a/hbase-annotations/license.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/mail-lists.html b/hbase-annotations/mail-lists.html
index 9da9a4b..939f348 100644
--- a/hbase-annotations/mail-lists.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugin-management.html b/hbase-annotations/plugin-management.html
index 4dcadb6..695f81b 100644
--- a/hbase-annotations/plugin-management.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugins.html b/hbase-annotations/plugins.html
index 91c4842..6f89e56 100644
--- a/hbase-annotations/plugins.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -222,7 +222,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-info.html b/hbase-annotations/project-info.html
index 63c2ec1..7e8798e 100644
--- a/hbase-annotations/project-info.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-reports.html b/hbase-annotations/project-reports.html
index 6557ea9..d9f4cc3 100644
--- a/hbase-annotations/project-reports.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -128,7 +128,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-summary.html b/hbase-annotations/project-summary.html
index 0a37aab..9807215 100644
--- a/hbase-annotations/project-summary.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/source-repository.html b/hbase-annotations/source-repository.html
index a009c9d..5fb7d0b 100644
--- a/hbase-annotations/source-repository.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-annotations/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/team-list.html b/hbase-annotations/team-list.html
index c72be42..7bada3b 100644
--- a/hbase-annotations/team-list.html
+++ b/hbase-annotations/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -523,7 +523,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependencies.html b/hbase-archetypes/dependencies.html
index f680a79..5b4885e 100644
--- a/hbase-archetypes/dependencies.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -354,7 +354,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-convergence.html b/hbase-archetypes/dependency-convergence.html
index 3a1eb0b..50cbe20 100644
--- a/hbase-archetypes/dependency-convergence.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -552,7 +552,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-info.html b/hbase-archetypes/dependency-info.html
index dbb9453..3f7d7f8 100644
--- a/hbase-archetypes/dependency-info.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -148,7 +148,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/hbase-archetypes/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-management.html b/hbase-archetypes/dependency-management.html
index 0fd4bd5..446110f 100644
--- a/hbase-archetypes/dependency-management.html
+++ b/hbase-archetypes/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 eeb4542..631ab89 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependencies.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -354,7 +354,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 0bead56..01a0a18 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -552,7 +552,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 7da457a..de5b0bba 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -148,7 +148,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 7bff323..c009d85 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 216c326..9f61342 100644
--- a/hbase-archetypes/hbase-archetype-builder/index.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 b7c07de..639b7e9 100644
--- a/hbase-archetypes/hbase-archetype-builder/integration.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 7432a1a..8a0f16f 100644
--- a/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 48fae1a..08dc97b 100644
--- a/hbase-archetypes/hbase-archetype-builder/license.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -124,7 +124,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 c234d8b..1f25683 100644
--- a/hbase-archetypes/hbase-archetype-builder/mail-lists.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 b1aa2ff..3cc2624 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugin-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 f994cce..f3226aa 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugins.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -214,7 +214,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 6389860..f478613 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 f3dd064..f4c4072 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-summary.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -163,7 +163,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 e96bb9a..897372b 100644
--- a/hbase-archetypes/hbase-archetype-builder/source-repository.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 750d2ab..d1655cd 100644
--- a/hbase-archetypes/hbase-archetype-builder/team-list.html
+++ b/hbase-archetypes/hbase-archetype-builder/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -523,7 +523,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 fdf8b45..ee5327e 100644
--- a/hbase-archetypes/hbase-client-project/checkstyle.html
+++ b/hbase-archetypes/hbase-client-project/checkstyle.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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -150,7 +150,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 5427c8c..1dc3f8e 100644
--- a/hbase-archetypes/hbase-client-project/dependencies.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -4184,7 +4184,7 @@ The following provides more details on the included cryptographic software:
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 0e80d67..127f0ec 100644
--- a/hbase-archetypes/hbase-client-project/dependency-convergence.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -552,7 +552,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 29d1e3c..fa7f4b5 100644
--- a/hbase-archetypes/hbase-client-project/dependency-info.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 3cbe814..989f075 100644
--- a/hbase-archetypes/hbase-client-project/dependency-management.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 7146b6f..654ff6f 100644
--- a/hbase-archetypes/hbase-client-project/index.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 06f32cd..97277be 100644
--- a/hbase-archetypes/hbase-client-project/integration.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 2d20d16..1b3406b 100644
--- a/hbase-archetypes/hbase-client-project/issue-tracking.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 4a48044..36afacf 100644
--- a/hbase-archetypes/hbase-client-project/license.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 7ec402e..5fa7fdf 100644
--- a/hbase-archetypes/hbase-client-project/mail-lists.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 d7a376f..cbb52e9 100644
--- a/hbase-archetypes/hbase-client-project/plugin-management.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 688f542..6367ce3 100644
--- a/hbase-archetypes/hbase-client-project/plugins.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -222,7 +222,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 67a773e..a33d194 100644
--- a/hbase-archetypes/hbase-client-project/project-info.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 20b2004..69532e6 100644
--- a/hbase-archetypes/hbase-client-project/project-reports.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -128,7 +128,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 a269b6a..ca23c67 100644
--- a/hbase-archetypes/hbase-client-project/project-summary.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 d511bd2..de9f53b 100644
--- a/hbase-archetypes/hbase-client-project/source-repository.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 68f0c20..412e98f 100644
--- a/hbase-archetypes/hbase-client-project/team-list.html
+++ b/hbase-archetypes/hbase-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -523,7 +523,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 4ecf3f5..844fccb 100644
--- a/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
+++ b/hbase-archetypes/hbase-shaded-client-project/checkstyle.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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -150,7 +150,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 1ebdf16..d7b4d8b 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependencies.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -4208,7 +4208,7 @@ These include: bzip2, gzip, pack200, xz and ar, cpio, jar, tar, zip, dump.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 8188ec6..fe08d1b 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -552,7 +552,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 4bfa49d..de430b7 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 3262fb8..469cc5d 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 16f86a4..1987882 100644
--- a/hbase-archetypes/hbase-shaded-client-project/index.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 52b5d6a..bd11671 100644
--- a/hbase-archetypes/hbase-shaded-client-project/integration.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 06d9887..28c77ee 100644
--- a/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 2299286..9aa8a2c 100644
--- a/hbase-archetypes/hbase-shaded-client-project/license.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 2e3f1c1..dce6fcd 100644
--- a/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 9177667..42e196a 100644
--- a/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 a0fb291..b2cb10f 100644
--- a/hbase-archetypes/hbase-shaded-client-project/plugins.html
+++ b/hbase-archetypes/hbase-shaded-client-project/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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -222,7 +222,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 


[31/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
index c21aec6..0362d7f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html
@@ -61,516 +61,530 @@
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.53"></a>
 <span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.54"></a>
 <span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Retry caller for scanning a region.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * &lt;p&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * reference of this object and use it to open new single region scanners.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final HashedWheelTimer retryTimer;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private final Scan scan;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ScanMetrics scanMetrics;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final long scannerId;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final ScanResultCache resultCache;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final RawScanResultConsumer consumer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final ClientService.Interface stub;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final HRegionLocation loc;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final boolean regionServerRemote;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final long pauseNs;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final int maxAttempts;<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final long scanTimeoutNs;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final long rpcTimeoutNs;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private final int startLogErrorsCnt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private final HBaseRpcController controller;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private byte[] nextStartRowWhenError;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private boolean includeNextStartRowWhenError;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private long nextCallStartNs;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private int tries;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private long nextCallSeq = -1L;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private enum ScanControllerState {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // usage. We use two things to prevent invalid usage:<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // to be used in the future.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // package private methods can only be called within the implementation of<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Make sure the methods are only called in this thread.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private final Thread callerThread = Thread.currentThread();<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // INITIALIZED -&gt; DESTROYED<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private ScanResumerImpl resumer;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    private void preCheck() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        "The current thread is %s, expected thread is %s, " +<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        Thread.currentThread(), callerThread);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        "Invalid Stopper state %s", state);<a name="line.163"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Retry caller for scanning a region.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * reference of this object and use it to open new single region scanners.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>@InterfaceAudience.Private<a name="line.71"></a>
+<span class="sourceLineNo">072</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final HashedWheelTimer retryTimer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final Scan scan;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final ScanMetrics scanMetrics;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final long scannerId;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final ScanResultCache resultCache;<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final RawScanResultConsumer consumer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ClientService.Interface stub;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final HRegionLocation loc;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final boolean regionServerRemote;<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private final long pauseNs;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final int maxAttempts;<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final long scanTimeoutNs;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private final long rpcTimeoutNs;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private final int startLogErrorsCnt;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private final HBaseRpcController controller;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  private byte[] nextStartRowWhenError;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private boolean includeNextStartRowWhenError;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private long nextCallStartNs;<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private int tries;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long nextCallSeq = -1L;<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private enum ScanControllerState {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // usage. We use two things to prevent invalid usage:<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // to be used in the future.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // package private methods can only be called within the implementation of<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // Make sure the methods are only called in this thread.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    private final Thread callerThread;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private final Optional&lt;Cursor&gt; cursor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // INITIALIZED -&gt; DESTROYED<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private ScanResumerImpl resumer;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    public ScanControllerImpl(ScanResponse resp) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      callerThread = Thread.currentThread();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      cursor = resp.hasCursor() ? Optional.of(ProtobufUtil.toCursor(resp.getCursor()))<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          : Optional.empty();<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    }<a name="line.164"></a>
 <span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    public ScanResumer suspend() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      preCheck();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      state = ScanControllerState.SUSPENDED;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      this.resumer = resumer;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return resumer;<a name="line.172"></a>
+<span class="sourceLineNo">166</span>    private void preCheck() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        "The current thread is %s, expected thread is %s, " +<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        Thread.currentThread(), callerThread);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        "Invalid Stopper state %s", state);<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>    @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public void terminate() {<a name="line.176"></a>
+<span class="sourceLineNo">176</span>    public ScanResumer suspend() {<a name="line.176"></a>
 <span class="sourceLineNo">177</span>      preCheck();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      state = ScanControllerState.TERMINATED;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // return the current state, and set the state to DESTROYED.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    ScanControllerState destroy() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      ScanControllerState state = this.state;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      this.state = ScanControllerState.DESTROYED;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      return state;<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>  private enum ScanResumerState {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  // controller.suspend().resume()<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // package private methods can only be called within the implementation of<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // INITIALIZED -&gt; RESUMED<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private ScanResponse resp;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int numberOfCompleteRows;<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // renewal task.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private Timeout leaseRenewer;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void resume() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ScanResponse localResp;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      int localNumberOfCompleteRows;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      synchronized (this) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          // user calls this method before we call prepare, so just set the state to<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          // RESUMED, the implementation will just go on.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          state = ScanResumerState.RESUMED;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          return;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        if (state == ScanResumerState.RESUMED) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          // already resumed, give up.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          return;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        state = ScanResumerState.RESUMED;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        if (leaseRenewer != null) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          leaseRenewer.cancel();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        localResp = this.resp;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      completeOrNext(localResp, localNumberOfCompleteRows);<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>    private void scheduleRenewLeaseTask() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      // the scan has already been resumed, give up<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (state == ScanResumerState.RESUMED) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        return;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      renewLease();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      scheduleRenewLeaseTask();<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>    // return false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // for more details.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      if (state == ScanResumerState.RESUMED) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return false;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      state = ScanResumerState.SUSPENDED;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.resp = resp;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // automatically so we do not need to renew lease.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      if (resp.getMoreResultsInRegion()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        // schedule renew lease task<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        scheduleRenewLeaseTask();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return true;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.retryTimer = retryTimer;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.scan = scan;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    this.scanMetrics = scanMetrics;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    this.scannerId = scannerId;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.resultCache = resultCache;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.consumer = consumer;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    this.stub = stub;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    this.loc = loc;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.pauseNs = pauseNs;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    this.maxAttempts = maxAttempts;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    if (scan.isReversed()) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    } else {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this.exceptions = new ArrayList&lt;&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private long elapsedMs() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<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 long remainingTimeNs() {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void closeScanner() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    resetController(controller, rpcTimeoutNs);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    stub.scan(controller, req, resp -&gt; {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      if (controller.failed()) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          controller.getFailed());<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">178</span>      state = ScanControllerState.SUSPENDED;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      this.resumer = resumer;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return resumer;<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>    @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    public void terminate() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      preCheck();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      state = ScanControllerState.TERMINATED;<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>    // return the current state, and set the state to DESTROYED.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    ScanControllerState destroy() {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      ScanControllerState state = this.state;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      this.state = ScanControllerState.DESTROYED;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      return state;<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>    public Optional&lt;Cursor&gt; cursor() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return cursor;<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>  private enum ScanResumerState {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  // controller.suspend().resume()<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  // package private methods can only be called within the implementation of<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // INITIALIZED -&gt; RESUMED<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private ScanResponse resp;<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private int numberOfCompleteRows;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // renewal task.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private Timeout leaseRenewer;<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    public void resume() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      ScanResponse localResp;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      int localNumberOfCompleteRows;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      synchronized (this) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          // user calls this method before we call prepare, so just set the state to<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          // RESUMED, the implementation will just go on.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          state = ScanResumerState.RESUMED;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (state == ScanResumerState.RESUMED) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // already resumed, give up.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          return;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        state = ScanResumerState.RESUMED;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (leaseRenewer != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          leaseRenewer.cancel();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        localResp = this.resp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      completeOrNext(localResp, localNumberOfCompleteRows);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    private void scheduleRenewLeaseTask() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      // the scan has already been resumed, give up<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      if (state == ScanResumerState.RESUMED) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      renewLease();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      scheduleRenewLeaseTask();<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 false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    // for more details.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      if (state == ScanResumerState.RESUMED) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        return false;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      state = ScanResumerState.SUSPENDED;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.resp = resp;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // automatically so we do not need to renew lease.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (resp.getMoreResultsInRegion()) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        // schedule renew lease task<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        scheduleRenewLeaseTask();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      }<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><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this.retryTimer = retryTimer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    this.scan = scan;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.scanMetrics = scanMetrics;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    this.scannerId = scannerId;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.resultCache = resultCache;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    this.consumer = consumer;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.stub = stub;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    this.loc = loc;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    this.pauseNs = pauseNs;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    this.maxAttempts = maxAttempts;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (scan.isReversed()) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } else {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    this.exceptions = new ArrayList&lt;&gt;();<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>  private long elapsedMs() {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private long remainingTimeNs() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void completeExceptionally(boolean closeScanner) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    resultCache.clear();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (closeScanner) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      closeScanner();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    future.complete(false);<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 void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    scan.withStartRow(row, inclusive);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    future.complete(true);<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>  private void completeWhenError(boolean closeScanner) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    resultCache.clear();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (closeScanner) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      closeScanner();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (nextStartRowWhenError != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    future.complete(true);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private void onError(Throwable error) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    error = translateException(error);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          " ms",<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        error);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    exceptions.add(qt);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (tries &gt;= maxAttempts) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      completeExceptionally(!scannerClosed);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long delayNs;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    if (scanTimeoutNs &gt; 0) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      if (maxDelayNs &lt;= 0) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        completeExceptionally(!scannerClosed);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        return;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (scannerClosed) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      completeWhenError(false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      completeWhenError(true);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    if (error instanceof DoNotRetryIOException) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      completeExceptionally(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    tries++;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<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 void updateNextStartRowWhenError(Result result) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    nextStartRowWhenError = result.getRow();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    includeNextStartRowWhenError = result.mayHaveMoreCellsInRow();<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>  private void completeWhenNoMoreResultsInRegion() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    if (noMoreResultsForScan(scan, loc.getRegionInfo())) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      completeNoMoreResults();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      completeWithNextStartRow(loc.getRegionInfo().getEndKey(), true);<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>  private void completeReversedWhenNoMoreResultsInRegion() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (noMoreResultsForReverseScan(scan, loc.getRegionInfo())) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      completeNoMoreResults();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      completeWithNextStartRow(loc.getRegionInfo().getStartKey(), false);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private void completeOrNext(ScanResponse resp, int numberOfCompleteRows) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    if (resp.hasMoreResults() &amp;&amp; !resp.getMoreResults()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      // RS tells us there is no more data for the whole scan<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      completeNoMoreResults();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      return;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (scan.getLimit() &gt; 0) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // The RS should have set the moreResults field in ScanResponse to false when we have reached<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // the limit, so we add an assert here.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      int newLimit = scan.getLimit() - numberOfCompleteRows;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      assert newLimit &gt; 0;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      scan.setLimit(newLimit);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // as in 2.0 this value will always be set<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (!resp.getMoreResultsInRegion()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      completeWhenNoMoreResultsInRegion.run();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    next();<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>  private void onComplete(HBaseRpcController controller, ScanResponse resp) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (controller.failed()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      onError(controller.getFailed());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    updateServerSideMetrics(scanMetrics, resp);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    boolean isHeartbeatMessage = resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Result[] results;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    int numberOfCompleteRowsBefore = resultCache.numberOfCompleteRows();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    try {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      Result[] rawResults = ResponseConverter.getResults(controller.cellScanner(), resp);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      updateResultsMetrics(scanMetrics, rawResults, isHeartbeatMessage);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      results = resultCache.addAndGet(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        Optional.ofNullable(rawResults).orElse(ScanResultCache.EMPTY_RESULT_ARRAY),<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        isHeartbeatMessage);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } catch (IOException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // We can not retry here. The server has responded normally and the call sequence has been<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // increased so a new scan with the same call sequence will cause an<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // OutOfOrderScannerNextException. Let the upper layer open a new scanner.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      LOG.warn("decode scan response failed", e);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      completeWhenError(true);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ScanControllerImpl scanController = new ScanControllerImpl();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    if (results.length &gt; 0) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      updateNextStartRowWhenError(results[results.length - 1]);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      consumer.onNext(results, scanController);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    } else if (resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      consumer.onHeartbeat(scanController);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    ScanControllerState state = scanController.destroy();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (state == ScanControllerState.TERMINATED) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      if (resp.getMoreResultsInRegion()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // we have more results in region but user request to stop the scan, so we need to close the<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // scanner explicitly.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        closeScanner();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      completeNoMoreResults();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      return;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    int numberOfCompleteRows = resultCache.numberOfCompleteRows() - numberOfCompleteRowsBefore;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (state == ScanControllerState.SUSPENDED) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (scanController.resumer.prepare(resp, numberOfCompleteRows)) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        return;<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>    completeOrNext(resp, numberOfCompleteRows);<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>  private void call() {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // As we have a call sequence for scan, it is useless to have a different rpc timeout which is<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // less than the scan timeout. If the server does not respond in time(usually this will not<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // happen as we have heartbeat now), we will get an OutOfOrderScannerNextException when<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // resending the next request and the only way to fix this is to close the scanner and open a<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // new one.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    long callTimeoutNs;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    if (scanTimeoutNs &gt; 0) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      long remainingNs = scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      if (remainingNs &lt;= 0) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        completeExceptionally(true);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        return;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      callTimeoutNs = remainingNs;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    } else {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      callTimeoutNs = 0L;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (tries &gt; 1) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      incRPCRetriesMetrics(scanMetrics, regionServerRemote);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    resetController(controller, callTimeoutNs);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    ScanRequest req = RequestConverter.buildScanRequest(scannerId, scan.getCaching(), false,<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      nextCallSeq, false, false, scan.getLimit());<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    stub.scan(controller, req, resp -&gt; onComplete(controller, resp));<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>  private void next() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    nextCallSeq++;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    tries = 1;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    exceptions.clear();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    nextCallStartNs = System.nanoTime();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    call();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  private void renewLease() {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    nextCallSeq++;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    resetController(controller, rpcTimeoutNs);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    ScanRequest req =<a name="line.547"></a>
-<span class="sourceLineNo">548</span>        RequestConverter.buildScanRequest(scannerId, 0, false, nextCallSeq, false, true, -1);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    stub.scan(controller, req, resp -&gt; {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    });<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Now we will also fetch some cells along with the scanner id when opening a scanner, so we also<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * need to process the ScanResponse for the open scanner request. The HBaseRpcController for the<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * open scanner request is also needed because we may have some data in the CellScanner which is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * contained in the controller.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @return {@code true} if we should continue, otherwise {@code false}.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public CompletableFuture&lt;Boolean&gt; start(HBaseRpcController controller,<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      ScanResponse respWhenOpen) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    onComplete(controller, respWhenOpen);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    return future;<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">340</span>  private void closeScanner() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    resetController(controller, rpcTimeoutNs);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    stub.scan(controller, req, resp -&gt; {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (controller.failed()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          controller.getFailed());<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>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  private void completeExceptionally(boolean closeScanner) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    resultCache.clear();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (closeScanner) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      closeScanner();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    future.complete(false);<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>  private void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    scan.withStartRow(row, inclusive);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    future.complete(true);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private void completeWhenError(boolean closeScanner) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    resultCache.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (closeScanner) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      closeScanner();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    if (nextStartRowWhenError != null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    future.complete(true);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private void onError(Throwable error) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    error = translateException(error);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          " ms",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        error);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    exceptions.add(qt);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (tries &gt;= maxAttempts) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      completeExceptionally(!scannerClosed);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      return;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    long delayNs;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (scanTimeoutNs &gt; 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (maxDelayNs &lt;= 0) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        completeExceptionally(!scannerClosed);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        return;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    } else {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (scannerClosed) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      completeWhenError(false);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      completeWhenError(true);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    if (error instanceof DoNotRetryIOException) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      completeExceptionally(true);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    tries++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private void updateNextStartRowWhenError(Result result) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    nextStartRowWhenError = result.getRow();<a name="line.4

<TRUNCATED>

[13/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
index 87e1c5b..98776b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html
@@ -27,680 +27,678 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.commons.logging.Log;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.commons.logging.LogFactory;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Cell;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * &lt;p&gt;<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * reached<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * &lt;p&gt;<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.50"></a>
-<span class="sourceLineNo">051</span> */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceStability.Evolving<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public class ScannerContext {<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  LimitFields limits;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  LimitFields progress;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  NextState scannerState;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * has been made towards the limits so far.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * &lt;p&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * &lt;p&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * For example: &lt;pre&gt; {@code<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * RegionScanner scanner = ...<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * while(scanner.next(results, context)) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   *   // Do something with a batch of 5 cells<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * saved and considered in future invocations<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  boolean keepProgress;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.98"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.Cell;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * &lt;p&gt;<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * reached<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;p&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * &lt;p&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> */<a name="line.49"></a>
+<span class="sourceLineNo">050</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceStability.Evolving<a name="line.51"></a>
+<span class="sourceLineNo">052</span>public class ScannerContext {<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  LimitFields limits;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  LimitFields progress;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  NextState scannerState;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * has been made towards the limits so far.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * &lt;p&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * &lt;p&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * For example: &lt;pre&gt; {@code<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * RegionScanner scanner = ...<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * while(scanner.next(results, context)) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   *   // Do something with a batch of 5 cells<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * saved and considered in future invocations<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  boolean keepProgress;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private Cell lastPeekedCell = null;<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private Cell peekedCellInHeartbeat = null;<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>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  final ServerSideScanMetrics metrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.limits = new LimitFields();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // Progress fields are initialized to 0<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.keepProgress = keepProgress;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.scannerState = DEFAULT_STATE;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<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>  boolean isTrackingMetrics() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return this.metrics != null;<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>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  ServerSideScanMetrics getMetrics() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assert isTrackingMetrics();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return this.metrics;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  boolean getKeepProgress() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this.keepProgress = keepProgress;<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>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  void incrementBatchProgress(int batch) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    int currentBatch = progress.getBatch();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    progress.setBatch(currentBatch + batch);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    long curDataSize = progress.getDataSize();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    long curHeapSize = progress.getHeapSize();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    progress.setHeapSize(curHeapSize + heapSize);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  void updateTimeProgress() {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    progress.setTime(System.currentTimeMillis());<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>  int getBatchProgress() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return progress.getBatch();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  long getDataSizeProgress() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return progress.getHeapSize();<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>  long getTimeProgress() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    setBatchProgress(batchProgress);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    progress.setDataSize(dataSizeProgress);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    progress.setTime(timeProgress);<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * values<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  void clearProgress() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param state<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return The state that was passed in.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  NextState setScannerState(NextState state) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (!NextState.isValidState(state)) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    return state;<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>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   *         a limit in the middle of a row<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  boolean mayHaveMoreCellsInRow() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<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>   * @param checkerScope<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param checkerScope<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>  /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param checkerScope<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<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>   * @param checkerScope<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>  /**<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param scope The scope in which the size limit will be enforced<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    limits.setTimeScope(scope);<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>  int getBatchLimit() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return limits.getBatch();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  long getDataSizeLimit() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return limits.getDataSize();<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>  long getTimeLimit() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return limits.getTime();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  boolean checkBatchLimit(LimitScope checkerScope) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return hasBatchLimit(checkerScope) &amp;&amp; progress.getBatch() &gt;= limits.getBatch();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  boolean checkSizeLimit(LimitScope checkerScope) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return hasSizeLimit(checkerScope) &amp;&amp; (progress.getDataSize() &gt;= limits.getDataSize()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        || progress.getHeapSize() &gt;= limits.getHeapSize());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<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>   * @param checkerScope The scope that the limit is being checked from. The time limit is always<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *          checked against {@link System#currentTimeMillis()}<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  boolean checkTimeLimit(LimitScope checkerScope) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return hasTimeLimit(checkerScope) &amp;&amp; progress.getTime() &gt;= limits.getTime();<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>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param checkerScope The scope that the limits are being checked from<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return true when some limit is enforceable from the checker's scope and it has been reached<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  boolean checkAnyLimitReached(LimitScope checkerScope) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return checkSizeLimit(checkerScope) || checkBatchLimit(checkerScope)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        || checkTimeLimit(checkerScope);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Cell getPeekedCellInHeartbeat() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return peekedCellInHeartbeat;<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>  public void setPeekedCellInHeartbeat(Cell peekedCellInHeartbeat) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    this.peekedCellInHeartbeat = peekedCellInHeartbeat;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public String toString() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    StringBuilder sb = new StringBuilder();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    sb.append("{");<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    sb.append("limits:");<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    sb.append(limits);<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    sb.append(", progress:");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    sb.append(progress);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>    sb.append(", keepProgress:");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    sb.append(keepProgress);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append(", state:");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append(scannerState);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("}");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    return sb.toString();<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>  public static Builder newBuilder() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return new Builder();<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 static Builder newBuilder(boolean keepProgress) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return new Builder(keepProgress);<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 static final class Builder {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean keepProgress = DEFAULT_KEEP_PROGRESS;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    boolean trackMetrics = false;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    LimitFields limits = new LimitFields();<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private Builder() {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private Builder(boolean keepProgress) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.keepProgress = keepProgress;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public Builder setKeepProgress(boolean keepProgress) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.keepProgress = keepProgress;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return this;<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>    public Builder setTrackMetrics(boolean trackMetrics) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.trackMetrics = trackMetrics;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return this;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public Builder setSizeLimit(LimitScope sizeScope, long dataSizeLimit, long heapSizeLimit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      limits.setDataSize(dataSizeLimit);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      limits.setHeapSize(heapSizeLimit);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      limits.setSizeScope(sizeScope);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return this;<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 Builder setTimeLimit(LimitScope timeScope, long timeLimit) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      limits.setTime(timeLimit);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      limits.setTimeScope(timeScope);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return this;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public Builder setBatchLimit(int batchLimit) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      limits.setBatch(batchLimit);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return this;<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>    public ScannerContext build() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      return new ScannerContext(keepProgress, limits, trackMetrics);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * The possible states a scanner may be in following a call to {@link InternalScanner#next(List)}<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public enum NextState {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    MORE_VALUES(true, false),<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    NO_MORE_VALUES(false, false),<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    SIZE_LIMIT_REACHED(true, true),<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>     * Special case of size limit reached to indicate that the size limit was reached in the middle<a name="line.427"></a>
-<span class="sourceLineNo">428</span>     * of a row and thus a partial results was formed<a name="line.428"></a>
-<span class="sourceLineNo">429</span>     */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    SIZE_LIMIT_REACHED_MID_ROW(true, true),<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    TIME_LIMIT_REACHED(true, true),<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>     * Special case of time limit reached to indicate that the time limit was reached in the middle<a name="line.434"></a>
-<span class="sourceLineNo">435</span>     * of a row and thus a partial results was formed<a name="line.435"></a>
-<span class="sourceLineNo">436</span>     */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    TIME_LIMIT_REACHED_MID_ROW(true, true),<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    BATCH_LIMIT_REACHED(true, true);<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    private boolean moreValues;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    private boolean limitReached;<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private NextState(boolean moreValues, boolean limitReached) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      this.moreValues = moreValues;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      this.limitReached = limitReached;<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>    /**<a name="line.448"></a>
-<span class="sourceLineNo">449</span>     * @return true when the state indicates that more values may follow those that have been<a name="line.449"></a>
-<span class="sourceLineNo">450</span>     *         returned<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    public boolean hasMoreValues() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return this.moreValues;<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>     * @return true when the state indicates that a limit has been reached and scan should stop<a name="line.457"></a>
-<span class="sourceLineNo">458</span>     */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    public boolean limitReached() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      return this.limitReached;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>    public static boolean isValidState(NextState state) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return state != null;<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>    public static boolean hasMoreValues(NextState state) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return isValidState(state) &amp;&amp; state.hasMoreValues();<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>  /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * The various scopes where a limit can be enforced. Used to differentiate when a limit should be<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * enforced or not.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public enum LimitScope {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    /**<a name="line.477"></a>
-<span class="sourceLineNo">478</span>     * Enforcing a limit between rows means that the limit will not be considered until all the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>     * cells for a particular row have been retrieved<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    BETWEEN_ROWS(0),<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>     * Enforcing a limit between cells means that the limit will be considered after each full cell<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * has been retrieved<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    BETWEEN_CELLS(1);<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>     * When enforcing a limit, we must check that the scope is appropriate for enforcement.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>     * &lt;p&gt;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>     * To communicate this concept, each scope has a depth. A limit will be enforced if the depth of<a name="line.492"></a>
-<span class="sourceLineNo">493</span>     * the checker's scope is less than or equal to the limit's scope. This means that when checking<a name="line.493"></a>
-<span class="sourceLineNo">494</span>     * limits, the checker must know their own scope (i.e. are they checking the limits between<a name="line.494"></a>
-<span class="sourceLineNo">495</span>     * rows, between cells, etc...)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int depth;<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    LimitScope(int depth) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.depth = depth;<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>    int depth() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return depth;<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>     * @param checkerScope The scope in which the limit is being checked<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     * @return true when the checker is in a scope that indicates the limit can be enforced. Limits<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *         can be enforced from "higher or equal" scopes (i.e. the checker's scope is at a<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *         lesser depth than the limit)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    boolean canEnforceLimitFromScope(LimitScope checkerScope) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      return checkerScope != null &amp;&amp; checkerScope.depth() &lt;= depth;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * The different fields that can be used as limits in calls to<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * {@link InternalScanner#next(java.util.List)} and {@link RegionScanner#next(java.util.List)}<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private static class LimitFields {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Default values of the limit fields. Defined such that if a field does NOT change from its<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     * default, it will not be enforced<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     */<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    private static int DEFAULT_BATCH = -1;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    private static long DEFAULT_SIZE = -1L;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    private static long DEFAULT_TIME = -1L;<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>     * Default scope that is assigned to a limit if a scope is not specified.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    private static final LimitScope DEFAULT_SCOPE = LimitScope.BETWEEN_ROWS;<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    // The batch limit will always be enforced between cells, thus, there isn't a field to hold the<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // batch scope<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    int batch = DEFAULT_BATCH;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    LimitScope sizeScope = DEFAULT_SCOPE;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // The sum of cell data sizes(key + value). The Cell data might be in on heap or off heap area.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    long dataSize = DEFAULT_SIZE;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    // The sum of heap space occupied by all tracked cells. This includes Cell POJO's overhead as<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    // such AND data cells of Cells which are in on heap area.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long heapSize = DEFAULT_SIZE;<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>    LimitScope timeScope = DEFAULT_SCOPE;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    long time = DEFAULT_TIME;<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     * Fields keep their default values.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>     */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    LimitFields() {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    LimitFields(int batch, LimitScope sizeScope, long size, long heapSize, LimitScope timeScope,<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        long time) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      setFields(batch, sizeScope, size, heapSize, timeScope, time);<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>    void copy(LimitFields limitsToCopy) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      if (limitsToCopy != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        setFields(limitsToCopy.getBatch(), limitsToCopy.getSizeScope(), limitsToCopy.getDataSize(),<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            limitsToCopy.getHeapSize(), limitsToCopy.getTimeScope(), limitsToCopy.getTime());<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<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>     * Set all fields together.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>     * @param batch<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * @param sizeScope<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     * @param dataSize<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    void setFields(int batch, LimitScope sizeScope, long dataSize, long heapSize,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        LimitScope timeScope, long time) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      setBatch(batch);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      setSizeScope(sizeScope);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      setDataSize(dataSize);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      setHeapSize(heapSize);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      setTimeScope(timeScope);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      setTime(time);<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>    int getBatch() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.batch;<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>    void setBatch(int batch) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.batch = batch;<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>     * @param checkerScope<a name="line.593"></a>
-<span class="sourceLineNo">594</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.594"></a>
-<span class="sourceLineNo">595</span>     */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    boolean canEnforceBatchLimitFromScope(LimitScope checkerScope) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return LimitScope.BETWEEN_CELLS.canEnforceLimitFromScope(checkerScope);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    long getDataSize() {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      return this.dataSize;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    long getHeapSize() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.heapSize;<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>    void setDataSize(long dataSize) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      this.dataSize = dataSize;<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>    void setHeapSize(long heapSize) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      this.heapSize = heapSize;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>     * @return {@link LimitScope} indicating scope in which the size limit is enforced<a name="line.617"></a>
-<span class="sourceLineNo">618</span>     */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    LimitScope getSizeScope() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.sizeScope;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>     * Change the scope in which the size limit is enforced<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    void setSizeScope(LimitScope scope) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      this.sizeScope = scope;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>     * @param checkerScope<a name="line.631"></a>
-<span class="sourceLineNo">632</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean canEnforceSizeLimitFromScope(LimitScope checkerScope) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.sizeScope.canEnforceLimitFromScope(checkerScope);<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>    long getTime() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      return this.time;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    void setTime(long time) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.time = time;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>    /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * @return {@link LimitScope} indicating scope in which the time limit is enforced<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    LimitScope getTimeScope() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.timeScope;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     * Change the scope in which the time limit is enforced<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     */<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    void setTimeScope(LimitScope scope) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      this.timeScope = scope;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * @param checkerScope<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    boolean canEnforceTimeLimitFromScope(LimitScope checkerScope) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return this.timeScope.canEnforceLimitFromScope(checkerScope);<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>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public String toString() {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      StringBuilder sb = new StringBuilder();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      sb.append("{");<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>      sb.append("batch:");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      sb.append(batch);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>      sb.append(", dataSize:");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      sb.append(dataSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      sb.append(", heapSize:");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      sb.append(heapSize);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      sb.append(", sizeScope:");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      sb.append(sizeScope);<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span>      sb.append(", time:");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      sb.append(time);<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>      sb.append(", timeScope:");<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      sb.append(timeScope);<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>      sb.append("}");<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      return sb.toString();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span>}<a name="line.695"></a>
+<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  final ServerSideScanMetrics metrics;<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.limits = new LimitFields();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // Progress fields are initialized to 0<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.keepProgress = keepProgress;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.scannerState = DEFAULT_STATE;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  boolean isTrackingMetrics() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return this.metrics != null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  ServerSideScanMetrics getMetrics() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    assert isTrackingMetrics();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return this.metrics;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  boolean getKeepProgress() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.keepProgress = keepProgress;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  void incrementBatchProgress(int batch) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    int currentBatch = progress.getBatch();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    progress.setBatch(currentBatch + batch);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<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>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    long curDataSize = progress.getDataSize();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    long curHeapSize = progress.getHeapSize();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    progress.setHeapSize(curHeapSize + heapSize);<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>  /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  void updateTimeProgress() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    progress.setTime(System.currentTimeMillis());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  int getBatchProgress() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return progress.getBatch();<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>  long getDataSizeProgress() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return progress.getHeapSize();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  long getTimeProgress() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    setBatchProgress(batchProgress);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    progress.setDataSize(dataSizeProgress);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    progress.setTime(timeProgress);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * values<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void clearProgress() {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * @param state<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @return The state that was passed in.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  NextState setScannerState(NextState state) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!NextState.isValidState(state)) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return state;<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>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   *         a limit in the middle of a row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  boolean mayHaveMoreCellsInRow() {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<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>   * @param checkerScope<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param checkerScope<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>   * @param checkerScope<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<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>  /**<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @param checkerScope<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>   * @param scope The scope in which the size limit will be enforced<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    limits.

<TRUNCATED>

[11/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
index ac1ff82..bc8bc72 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
@@ -56,1127 +56,1126 @@
 <span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.querymatcher.LegacyScanQueryMatcher;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.querymatcher.UserScanQueryMatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.CollectionUtils;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>/**<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream into List&amp;lt;KeyValue&amp;gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * for a single row.<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * &lt;p&gt;<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * The implementation is not thread safe. So there will be no race between next and close. The only<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * exception is updateReaders, it will be called in the memstore flush thread to indicate that there<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * is a flush.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> */<a name="line.63"></a>
-<span class="sourceLineNo">064</span>@InterfaceAudience.Private<a name="line.64"></a>
-<span class="sourceLineNo">065</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // In unit tests, the store could be null<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  protected final Store store;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private ScanQueryMatcher matcher;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  protected KeyValueHeap heap;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private boolean cacheBlocks;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private long countPerRow = 0;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private int storeLimit = -1;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private int storeOffset = 0;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  // Do not need to be volatile because it's always accessed via synchronized methods<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private boolean closing = false;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final boolean get;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final boolean explicitColumnQuery;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final boolean useRowColBloom;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private boolean parallelSeekEnabled = false;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private ExecutorService executor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final Scan scan;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final long oldestUnexpiredTS;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final long now;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final int minVersions;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private final long maxRowSize;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private final long cellsPerHeartbeatCheck;<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  // 1) Collects all the KVHeap that are eagerly getting closed during the<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  //    course of a scan<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // 2) Collects the unused memstore scanners. If we close the memstore scanners<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  //    before sending data to client, the chunk may be reclaimed by other<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  //    updates and the data will be corrupt.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final List&lt;KeyValueScanner&gt; scannersForDelayedClose = new ArrayList&lt;&gt;();<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>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   */<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private long kvsScanned = 0;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  private Cell prevCell = null;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private final long preadMaxBytes;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private long bytesRead;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private static boolean lazySeekEnabledGlobally = LAZY_SEEK_ENABLED_BY_DEFAULT;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * timeout checks.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  /**<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * If the read type if Scan.ReadType.DEFAULT, we will start with pread, and if the kvs we scanned<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * reaches this limit, we will reopen the scanner with stream. The default value is 4 times of<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * block size for this store.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public static final String STORESCANNER_PREAD_MAX_BYTES = "hbase.storescanner.pread.max.bytes";<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final Scan.ReadType readType;<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // A flag whether use pread for scan<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  // it maybe changed if we use Scan.ReadType.DEFAULT and we have read lots of data.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private boolean scanUsePread;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  // Indicates whether there was flush during the course of the scan<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private volatile boolean flushed = false;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  // generally we get one file from a flush<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final List&lt;StoreFile&gt; flushedStoreFiles = new ArrayList&lt;&gt;(1);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  // Since CompactingMemstore is now default, we get three memstore scanners from a flush<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final List&lt;KeyValueScanner&gt; memStoreScannersAfterFlush = new ArrayList&lt;&gt;(3);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  // The current list of scanners<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @VisibleForTesting<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  final List&lt;KeyValueScanner&gt; currentScanners = new ArrayList&lt;&gt;();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  // flush update lock<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private final ReentrantLock flushLock = new ReentrantLock();<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected final long readPt;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private boolean topChanged = false;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  enum StoreScannerCompactionRace {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    BEFORE_SEEK,<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    AFTER_SEEK,<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    COMPACT_COMPLETE<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>  /** An internal constructor. */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  protected StoreScanner(Store store, Scan scan, final ScanInfo scanInfo,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      final NavigableSet&lt;byte[]&gt; columns, long readPt, boolean cacheBlocks, ScanType scanType) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.readPt = readPt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    this.store = store;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    this.cacheBlocks = cacheBlocks;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    get = scan.isGetScan();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    int numCol = columns == null ? 0 : columns.size();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    explicitColumnQuery = numCol &gt; 0;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.scan = scan;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    this.now = EnvironmentEdgeManager.currentTime();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.oldestUnexpiredTS = scan.isRaw() ? 0L : now - scanInfo.getTtl();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.minVersions = scanInfo.getMinVersions();<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>     // We look up row-column Bloom filters for multi-column queries as part of<a name="line.182"></a>
-<span class="sourceLineNo">183</span>     // the seek operation. However, we also look the row-column Bloom filter<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     // for multi-row (non-"get") scans because this is not done in<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     // StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     this.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>     this.maxRowSize = scanInfo.getTableMaxRowSize();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    if (get) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.readType = Scan.ReadType.PREAD;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.scanUsePread = true;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    } else if(scanType != scanType.USER_SCAN) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      // For compaction scanners never use Pread as already we have stream based scanners on the<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      // store files to be compacted<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      this.readType = Scan.ReadType.STREAM;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      this.scanUsePread = false;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } else {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      if (scan.getReadType() == Scan.ReadType.DEFAULT) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        this.readType = scanInfo.isUsePread() ? Scan.ReadType.PREAD : Scan.ReadType.DEFAULT;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } else {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        this.readType = scan.getReadType();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // Always start with pread unless user specific stream. Will change to stream later if<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // readType is default if the scan keeps running for a long time.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      this.scanUsePread = this.readType != Scan.ReadType.STREAM;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    this.preadMaxBytes = scanInfo.getPreadMaxBytes();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    this.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // Parallel seeking is on if the config allows and more there is more than one store file.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (this.store != null &amp;&amp; this.store.getStorefilesCount() &gt; 1) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      RegionServerServices rsService = ((HStore) store).getHRegion().getRegionServerServices();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      if (rsService != null &amp;&amp; scanInfo.isParallelSeekEnabled()) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        this.parallelSeekEnabled = true;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        this.executor = rsService.getExecutorService();<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>  private void addCurrentScanners(List&lt;? extends KeyValueScanner&gt; scanners) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    this.currentScanners.addAll(scanners);<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>  /**<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * are not in a compaction.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param store who we scan<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @param scan the spec<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @param columns which columns we are scanning<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @throws IOException<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, final NavigableSet&lt;byte[]&gt; columns,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      long readPt)<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  throws IOException {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    this(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks(), ScanType.USER_SCAN);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    if (columns != null &amp;&amp; scan.isRaw()) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      throw new DoNotRetryIOException("Cannot specify any column for a raw scan");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    matcher = UserScanQueryMatcher.create(scan, scanInfo, columns, oldestUnexpiredTS, now,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      store.getCoprocessorHost());<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.store.addChangedReaderObserver(this);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    try {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Pass columns to try to filter out unnecessary StoreFiles.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>      // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      // key does not exist, then to the start of the next matching Row).<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // Always check bloom filter to optimize the top row seek for delete<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      // family marker.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery &amp;&amp; lazySeekEnabledGlobally,<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        parallelSeekEnabled);<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>      // set storeLimit<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>      // set rowOffset<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      this.storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      addCurrentScanners(scanners);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      // Combine all seeked scanners with a heap<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      resetKVHeap(scanners, store.getComparator());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    } catch (IOException e) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // remove us from the HStore#changedReaderObservers here or we'll have no chance to<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // and might cause memory leak<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.store.deleteChangedReaderObserver(this);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      throw e;<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * Used for compactions.&lt;p&gt;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   *<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Opens a scanner across specified StoreFiles.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @param store who we scan<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param scan the spec<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param scanners ancillary scanners<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @param smallestReadPoint the readPoint that we should use for tracking<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   *          versions<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType,<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      long smallestReadPoint, long earliestPutTs) throws IOException {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, null, null);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   *<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * Opens a scanner across specified StoreFiles.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param store who we scan<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @param scan the spec<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param scanners ancillary scanners<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @param smallestReadPoint the readPoint that we should use for tracking versions<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      List&lt;? extends KeyValueScanner&gt; scanners, long smallestReadPoint, long earliestPutTs,<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    this(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        earliestPutTs, dropDeletesFromRow, dropDeletesToRow);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType, long smallestReadPoint,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    this(store, scan, scanInfo, null,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        ((HStore) store).getHRegion().getReadPoint(IsolationLevel.READ_COMMITTED), false, scanType);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    if (scan.hasFilter() || (scan.getStartRow() != null &amp;&amp; scan.getStartRow().length &gt; 0)<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        || (scan.getStopRow() != null &amp;&amp; scan.getStopRow().length &gt; 0)<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        || !scan.getTimeRange().isAllTime()) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      // use legacy query matcher since we do not consider the scan object in our code. Only used to<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // keep compatibility for coprocessor.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      matcher = LegacyScanQueryMatcher.create(scan, scanInfo, null, scanType, smallestReadPoint,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        earliestPutTs, oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow,<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        store.getCoprocessorHost());<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    } else {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      matcher = CompactionScanQueryMatcher.create(scanInfo, scanType, smallestReadPoint,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        earliestPutTs, oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        store.getCoprocessorHost());<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>    // Filter the list of scanners using Bloom filters, time range, TTL, etc.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    scanners = selectScannersFrom(scanners);<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // Seek all scanners to the initial key<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    addCurrentScanners(scanners);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    // Combine all seeked scanners with a heap<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    resetKVHeap(scanners, store.getComparator());<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>  @VisibleForTesting<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      final List&lt;? extends KeyValueScanner&gt; scanners) throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    this(scan, scanInfo, scanType, columns, scanners,<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        HConstants.LATEST_TIMESTAMP,<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        // 0 is passed as readpoint because the test bypasses Store<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        0);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @VisibleForTesting<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    final List&lt;? extends KeyValueScanner&gt; scanners, long earliestPutTs)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    this(scan, scanInfo, scanType, columns, scanners, earliestPutTs,<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // 0 is passed as readpoint because the test bypasses Store<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      0);<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>  public StoreScanner(final Scan scan, ScanInfo scanInfo, ScanType scanType,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      final NavigableSet&lt;byte[]&gt; columns, final List&lt;? extends KeyValueScanner&gt; scanners, long earliestPutTs,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      long readPt) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    this(null, scan, scanInfo, columns, readPt,<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        scanType == ScanType.USER_SCAN ? scan.getCacheBlocks() : false, scanType);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    if (scanType == ScanType.USER_SCAN) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      this.matcher = UserScanQueryMatcher.create(scan, scanInfo, columns, oldestUnexpiredTS, now,<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        null);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    } else {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      if (scan.hasFilter() || (scan.getStartRow() != null &amp;&amp; scan.getStartRow().length &gt; 0)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          || (scan.getStopRow() != null &amp;&amp; scan.getStopRow().length &gt; 0)<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          || !scan.getTimeRange().isAllTime() || columns != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        // use legacy query matcher since we do not consider the scan object in our code. Only used<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        // to keep compatibility for coprocessor.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>        matcher = LegacyScanQueryMatcher.create(scan, scanInfo, columns, scanType, Long.MAX_VALUE,<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          earliestPutTs, oldestUnexpiredTS, now, null, null, store.getCoprocessorHost());<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      } else {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        this.matcher = CompactionScanQueryMatcher.create(scanInfo, scanType, Long.MAX_VALUE,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          earliestPutTs, oldestUnexpiredTS, now, null, null, null);<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><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Seek all scanners to the initial key<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    addCurrentScanners(scanners);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    resetKVHeap(scanners, scanInfo.getComparator());<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>  /**<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * Get a filtered list of scanners. Assumes we are not in a compaction.<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @return list of scanners to seek<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private List&lt;KeyValueScanner&gt; getScannersNoCompaction() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    return selectScannersFrom(<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      store.getScanners(cacheBlocks, scanUsePread, false, matcher, scan.getStartRow(),<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        scan.includeStartRow(), scan.getStopRow(), scan.includeStopRow(), this.readPt));<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  @VisibleForTesting<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  boolean isScanUsePread() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return this.scanUsePread;<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>   * Seek the specified scanners with the given key<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @param scanners<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param seekKey<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param isLazy true if using lazy seek<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @param isParallelSeek true if using parallel seek<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @throws IOException<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  protected void seekScanners(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      Cell seekKey, boolean isLazy, boolean isParallelSeek)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      throws IOException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // key does not exist, then to the start of the next matching Row).<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    // family marker.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    if (isLazy) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      for (KeyValueScanner scanner : scanners) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        scanner.requestSeek(seekKey, false, true);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      if (!isParallelSeek) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        long totalScannersSoughtBytes = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        for (KeyValueScanner scanner : scanners) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          if (matcher.isUserScan() &amp;&amp; totalScannersSoughtBytes &gt;= maxRowSize) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>            throw new RowTooBigException("Max row size allowed: " + maxRowSize<a name="line.420"></a>
-<span class="sourceLineNo">421</span>              + ", but row is bigger than that");<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          scanner.seek(seekKey);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          Cell c = scanner.peek();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (c != null) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            totalScannersSoughtBytes += CellUtil.estimatedSerializedSizeOf(c);<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>      } else {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        parallelSeek(scanners, seekKey);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<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>  protected void resetKVHeap(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      CellComparator comparator) throws IOException {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // Combine all seeked scanners with a heap<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    heap = new KeyValueHeap(scanners, comparator);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Filters the given list of scanners using Bloom filter, time range, and<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * TTL.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * &lt;p&gt;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * Will be overridden by testcase so declared as protected.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  @VisibleForTesting<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  protected List&lt;KeyValueScanner&gt; selectScannersFrom(<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final List&lt;? extends KeyValueScanner&gt; allScanners) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    boolean memOnly;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    boolean filesOnly;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    if (scan instanceof InternalScan) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      InternalScan iscan = (InternalScan)scan;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      memOnly = iscan.isCheckOnlyMemStore();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      filesOnly = iscan.isCheckOnlyStoreFiles();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    } else {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      memOnly = false;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      filesOnly = false;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;&gt;(allScanners.size());<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // We can only exclude store files based on TTL if minVersions is set to 0.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    // Otherwise, we might have to return KVs that have technically expired.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    long expiredTimestampCutoff = minVersions == 0 ? oldestUnexpiredTS: Long.MIN_VALUE;<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // include only those scan files which pass all filters<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    for (KeyValueScanner kvs : allScanners) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      boolean isFile = kvs.isFileScanner();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if ((!isFile &amp;&amp; filesOnly) || (isFile &amp;&amp; memOnly)) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        continue;<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>      if (kvs.shouldUseScanner(scan, store, expiredTimestampCutoff)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        scanners.add(kvs);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      } else {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        kvs.close();<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    return scanners;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>  @Override<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  public Cell peek() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return heap != null ? heap.peek() : null;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>  @Override<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  public KeyValue next() {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // throw runtime exception perhaps?<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    throw new RuntimeException("Never call StoreScanner.next()");<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>  @Override<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  public void close() {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    close(true);<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>  private void close(boolean withDelayedScannersClose) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (this.closing) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      return;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    if (withDelayedScannersClose) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.closing = true;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Under test, we dont have a this.store<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.store != null) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.store.deleteChangedReaderObserver(this);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (withDelayedScannersClose) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      clearAndClose(scannersForDelayedClose);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      clearAndClose(memStoreScannersAfterFlush);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (this.heap != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        this.heap.close();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        this.currentScanners.clear();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        this.heap = null; // CLOSED!<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    } else {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (this.heap != null) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        this.scannersForDelayedClose.add(this.heap);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        this.currentScanners.clear();<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        this.heap = null;<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>  }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>  @Override<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  public boolean seek(Cell key) throws IOException {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    if (checkFlushed()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      reopenAfterFlush();<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return this.heap.seek(key);<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>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public boolean next(List&lt;Cell&gt; outResult) throws IOException {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return next(outResult, NoLimitScannerContext.getInstance());<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  /**<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * Get the next row of values from this Store.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param outResult<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param scannerContext<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @return true if there are more rows, false if scanner is done<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   */<a name="line.545"></a>
-<span class="sourceLineNo">546</span>  @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  public boolean next(List&lt;Cell&gt; outResult, ScannerContext scannerContext) throws IOException {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    if (scannerContext == null) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    if (checkFlushed() &amp;&amp; reopenAfterFlush()) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>    // if the heap was left null, then the scanners had previously run out anyways, close and<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    // return.<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    if (this.heap == null) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      // By this time partial close should happened because already heap is null<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      close(false);// Do all cleanup except heap.close()<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>    Cell cell = this.heap.peek();<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (cell == null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      close(false);// Do all cleanup except heap.close()<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>    // only call setRow if the row changes; avoids confusing the query matcher<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    // if scanning intra-row<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>    // If no limits exists in the scope LimitScope.Between_Cells then we are sure we are changing<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    // rows. Else it is possible we are still traversing the same row so we must perform the row<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // comparison.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    if (!scannerContext.hasAnyLimit(LimitScope.BETWEEN_CELLS) || matcher.currentRow() == null) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      this.countPerRow = 0;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      matcher.setToNewRow(cell);<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>    // Clear progress away unless invoker has indicated it should be kept.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    if (!scannerContext.getKeepProgress()) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      scannerContext.clearProgress();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    // Only do a sanity-check if store and comparator are available.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    CellComparator comparator = store != null ? store.getComparator() : null;<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    int count = 0;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    long totalBytesRead = 0;<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    LOOP: do {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      // Update and check the time limit based on the configured value of cellsPerTimeoutCheck<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      if ((kvsScanned % cellsPerHeartbeatCheck == 0)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        scannerContext.updateTimeProgress();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        if (scannerContext.checkTimeLimit(LimitScope.BETWEEN_CELLS)) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          scannerContext.setPeekedCellInHeartbeat(prevCell);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          return scannerContext.setScannerState(NextState.TIME_LIMIT_REACHED).hasMoreValues();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      }<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // Do object compare - we set prevKV from the same heap.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      if (prevCell != cell) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        ++kvsScanned;<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      checkScanOrder(prevCell, cell, comparator);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      int cellSize = CellUtil.estimatedSerializedSizeOf(cell);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      bytesRead += cellSize;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      prevCell = cell;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      topChanged = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      ScanQueryMatcher.MatchCode qcode = matcher.match(cell);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      switch (qcode) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        case INCLUDE:<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        case INCLUDE_AND_SEEK_NEXT_ROW:<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        case INCLUDE_AND_SEEK_NEXT_COL:<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>          Filter f = matcher.getFilter();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          if (f != null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>            cell = f.transformCell(cell);<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>          this.countPerRow++;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          if (storeLimit &gt; -1 &amp;&amp; this.countPerRow &gt; (storeLimit + storeOffset)) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            // do what SEEK_NEXT_ROW does.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            if (!matcher.moreRowsMayExistAfter(cell)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>              close(false);// Do all cleanup except heap.close()<a name="line.624"></a>
-<span class="sourceLineNo">625</span>              return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>            }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>            matcher.clearCurrentRow();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>            seekToNextRow(cell);<a name="line.628"></a>
-<span class="sourceLineNo">629</span>            break LOOP;<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>          // add to results only if we have skipped #storeOffset kvs<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          // also update metric accordingly<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          if (this.countPerRow &gt; storeOffset) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>            outResult.add(cell);<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>            // Update local tracking information<a name="line.637"></a>
-<span class="sourceLineNo">638</span>            count++;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>            totalBytesRead += cellSize;<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // Update the progress of the scanner context<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            scannerContext.incrementSizeProgress(cellSize, CellUtil.estimatedHeapSizeOf(cell));<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            scannerContext.incrementBatchProgress(1);<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>            if (matcher.isUserScan() &amp;&amp; totalBytesRead &gt; maxRowSize) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              throw new RowTooBigException(<a name="line.646"></a>
-<span class="sourceLineNo">647</span>                  "Max row size allowed: " + maxRowSize + ", but the row is bigger than that.");<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>          if (qcode == ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_ROW) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>            if (!matcher.moreRowsMayExistAfter(cell)) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>              close(false);// Do all cleanup except heap.close()<a name="line.653"></a>
-<span class="sourceLineNo">654</span>              return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>            }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>            matcher.clearCurrentRow();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>            seekOrSkipToNextRow(cell);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          } else if (qcode == ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_COL) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>            seekOrSkipToNextColumn(cell);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          } else {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            this.heap.next();<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>          if (scannerContext.checkBatchLimit(LimitScope.BETWEEN_CELLS)) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            break LOOP;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          if (scannerContext.checkSizeLimit(LimitScope.BETWEEN_CELLS)) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>            break LOOP;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>          continue;<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>        case DONE:<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          // Optimization for Gets! If DONE, no more to get on this row, early exit!<a name="line.673"></a>
-<span class="sourceLineNo">674</span>          if (get) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>            // Then no more to this row... exit.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            close(false);// Do all cleanup except heap.close()<a name="line.676"></a>
-<span class="sourceLineNo">677</span>            return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          matcher.clearCurrentRow();<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>        case DONE_SCAN:<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          close(false);// Do all cleanup except heap.close()<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>        case SEEK_NEXT_ROW:<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          // This is just a relatively simple end of scan fix, to short-cut end<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          // us if there is an endKey in the scan.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          if (!matcher.moreRowsMayExistAfter(cell)) {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            close(false);// Do all cleanup except heap.close()<a name="line.690"></a>
-<span class="sourceLineNo">691</span>            return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>          }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>          matcher.clearCurrentRow();<a name="line.693"></a>
-<span class="sourceLineNo">694</span>          seekOrSkipToNextRow(cell);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          NextState stateAfterSeekNextRow = needToReturn(outResult);<a name="line.695"></a>
-<span class="sourceLineNo">696</span>          if (stateAfterSeekNextRow != null) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>            return scannerContext.setScannerState(stateAfterSeekNextRow).hasMoreValues();<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          }<a name="line.698"></a>
-<span class="sourceLineNo">699</span>          break;<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>        case SEEK_NEXT_COL:<a name="line.701"></a>
-<span class="sourceLineNo">702</span>          seekOrSkipToNextColumn(cell);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>          NextState stateAfterSeekNextColumn = needToReturn(outResult);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>          if (stateAfterSeekNextColumn != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>            return scannerContext.setScannerState(stateAfterSeekNextColumn).hasMoreValues();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>          }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          break;<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>        case SKIP:<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          this.heap.next();<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          break;<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span>        case SEEK_NEXT_USING_HINT:<a name="line.713"></a>
-<span class="sourceLineNo">714</span>          Cell nextKV = matcher.getNextKeyHint(cell);<a name="line.714"></a>
-<span class="sourceLineNo">715</span>          if (nextKV != null) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            seekAsDirection(nextKV);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            NextState stateAfterSeekByHint = needToReturn(outResult);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            if (stateAfterSeekByHint != null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>              return scannerContext.setScannerState(stateAfterSeekByHint).hasMoreValues();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>            }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          } else {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>            heap.next();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          }<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          break;<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span>        default:<a name="line.726"></a>
-<span class="sourceLineNo">727</span>          throw new RuntimeException("UNEXPECTED");<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    } while ((cell = this.heap.peek()) != null);<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span>    if (count &gt; 0) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // No more keys<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    close(false);// Do all cleanup except heap.close()<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>   * If the top cell won't be flushed into disk, the new top cell may be<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * changed after #reopenAfterFlush. Because the older top cell only exist<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * in the memstore scanner but the memstore scanner is replaced by hfile<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * scanner after #reopenAfterFlush. If the row of top cell is changed,<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * we should return the current cells. Otherwise, we may return<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * the cells across different rows.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @param outResult the cells which are visible for user scan<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * @return null is the top cell doesn't change. Otherwise, the NextState<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   *         to return<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   */<a name="line.750"></a>
-<span class="sourceLineNo">751</span>  private NextState needToReturn(List&lt;Cell&gt; outResult) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    if (!outResult.isEmpty() &amp;&amp; topChanged) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      return heap.peek() == null ? NextState.NO_MORE_VALUES : NextState.MORE_VALUES;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return null;<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  private void seekOrSkipToNextRow(Cell cell) throws IOException {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    // If it is a Get Scan, then we know that we are done with this row; there are no more<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    // rows beyond the current one: don't try to optimize.<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    if (!get) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      if (trySkipToNextRow(cell)) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>        return;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    seekToNextRow(cell);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>  private void seekOrSkipToNextColumn(Cell cell) throws IOException {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    if (!trySkipToNextColumn(cell)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      seekAsDirection(matcher.getKeyForNextColumn(cell));<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>  /**<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * See if we should actually SEEK or rather just SKIP to the next Cell (see HBASE-13109).<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * ScanQueryMatcher may issue SEEK hints, such as seek to next column, next row,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   * or seek to an arbitrary seek key. This method decides whether a seek is the most efficient<a name="line.778"></a>
-<span class="sourceLineNo">779</span>   * _actual_ way to get us to the requested cell (SEEKs are more expensive than SKIP, SKIP,<a name="line.779"></a>
-<span class="sourceLineNo">780</span>   * SKIP inside the current, loaded block).<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * It does this by looking at the next indexed key of the current HFile. This key<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   * is then compared with the _SEEK_ key, where a SEEK key is an artificial 'last possible key<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * on the row' (only in here, we avoid actually creating a SEEK key; in the compare we work with<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the current Cell but compare as though it were a seek key; see down in<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * matcher.compareKeyForNextRow, etc). If the compare gets us onto the<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * next block we *_SEEK, otherwise we just SKIP to the next requested cell.<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   *<a name="line.787"></a>
-<span class="sourceLineNo">788</span>   * &lt;p&gt;Other notes:<a name="line.788"></a>
-<span class="sourceLineNo">789</span>   * &lt;ul&gt;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   * &lt;li&gt;Rows can straddle block boundaries&lt;/li&gt;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>   * &lt;li&gt;Versions of columns can straddle block boundaries (i.e. column C1 at T1 might be in a<a name="line.791"></a>
-<span class="sourceLineNo">792</span>   * different block than column C1 at T2)&lt;/li&gt;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   * &lt;li&gt;We want to SKIP if the chance is high that we'll find the desired Cell after a<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * few SKIPs...&lt;/li&gt;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * &lt;li&gt;We want to SEEK when the chance is high that we'll be able to seek<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * past many Cells, especially if we know we need to go to the next block.&lt;/li&gt;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * &lt;/ul&gt;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * &lt;p&gt;A good proxy (best effort) to determine whether SKIP is better than SEEK is whether<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * we'll likely end up seeking to the next block (or past the next block) to get our next column.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * Example:<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * &lt;pre&gt;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * |    BLOCK 1              |     BLOCK 2                   |<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * |  r1/c1, r1/c2, r1/c3    |    r1/c4, r1/c5, r2/c1        |<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   *                                   ^         ^<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   *                                   |         |<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   *                           Next Index Key   SEEK_NEXT_ROW (before r2/c1)<a name="line.806"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.CollectionUtils;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>/**<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream into List&amp;lt;KeyValue&amp;gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * for a single row.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * The implementation is not thread safe. So there will be no race between next and close. The only<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * exception is updateReaders, it will be called in the memstore flush thread to indicate that there<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * is a flush.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>@InterfaceAudience.Private<a name="line.63"></a>
+<span class="sourceLineNo">064</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  // In unit tests, the store could be null<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  protected final Store store;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private ScanQueryMatcher matcher;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  protected KeyValueHeap heap;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private boolean cacheBlocks;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private long countPerRow = 0;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private int storeLimit = -1;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private int storeOffset = 0;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  // Do not need to be volatile because it's always accessed via synchronized methods<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private boolean closing = false;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final boolean get;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final boolean explicitColumnQuery;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final boolean useRowColBloom;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private boolean parallelSeekEnabled = false;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private ExecutorService executor;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final Scan scan;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private final long oldestUnexpiredTS;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final long now;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final int minVersions;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final long maxRowSize;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final long cellsPerHeartbeatCheck;<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  // 1) Collects all the KVHeap that are eagerly getting closed during the<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  //    course of a scan<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  // 2) Collects the unused memstore scanners. If we close the memstore scanners<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  //    before sending data to client, the chunk may be reclaimed by other<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  //    updates and the data will be corrupt.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final List&lt;KeyValueScanner&gt; scannersForDelayedClose = new ArrayList&lt;&gt;();<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>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private long kvsScanned = 0;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  protected Cell prevCell = null;<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private final long preadMaxBytes;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private long bytesRead;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private static boolean lazySeekEnabledGlobally = LAZY_SEEK_ENABLED_BY_DEFAULT;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  /**<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * timeout checks.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * If the read type if Scan.ReadType.DEFAULT, we will start with pread, and if the kvs we scanned<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * reaches this limit, we will reopen the scanner with stream. The default value is 4 times of<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * block size for this store.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  public static final String STORESCANNER_PREAD_MAX_BYTES = "hbase.storescanner.pread.max.bytes";<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final Scan.ReadType readType;<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // A flag whether use pread for scan<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // it maybe changed if we use Scan.ReadType.DEFAULT and we have read lots of data.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private boolean scanUsePread;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  // Indicates whether there was flush during the course of the scan<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private volatile boolean flushed = false;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  // generally we get one file from a flush<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final List&lt;StoreFile&gt; flushedStoreFiles = new ArrayList&lt;&gt;(1);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  // Since CompactingMemstore is now default, we get three memstore scanners from a flush<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final List&lt;KeyValueScanner&gt; memStoreScannersAfterFlush = new ArrayList&lt;&gt;(3);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  // The current list of scanners<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  @VisibleForTesting<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  final List&lt;KeyValueScanner&gt; currentScanners = new ArrayList&lt;&gt;();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  // flush update lock<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  private final ReentrantLock flushLock = new ReentrantLock();<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>  protected final long readPt;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private boolean topChanged = false;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  enum StoreScannerCompactionRace {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    BEFORE_SEEK,<a name="line.162"></a>

<TRUNCATED>

[18/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
index 9a8f45d..665ad9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
@@ -26,3462 +26,3459 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.net.BindException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.nio.ByteBuffer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Iterator;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.NavigableMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.TreeSet;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ConcurrentMap;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.LongAdder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.Path;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HConstants;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ServerName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.TableName;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Append;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Get;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Put;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Result;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.User;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.zookeeper.KeeperException;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<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> * Implements the regionserver RPC services.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>@InterfaceAudience.Private<a name="line.229"></a>
-<span class="sourceLineNo">230</span>@SuppressWarnings("deprecation")<a name="line.230"></a>
-<span class="sourceLineNo">231</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    ConfigurationObserver {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /** RPC scheduler to use for the region server. */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.259"></a>
+<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.InterruptedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.BindException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.net.InetSocketAddress;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.UnknownHostException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.ByteBuffer;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Arrays;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.NavigableMap;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.TreeSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.atomic.LongAdder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.commons.logging.Log;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.logging.LogFactory;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ServerName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Append;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Get;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Put;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Result;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.User;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.zookeeper.KeeperException;<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> * Implements the regionserver RPC services.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>@InterfaceAudience.Private<a name="line.226"></a>
+<span class="sourceLineNo">227</span>@SuppressWarnings("deprecation")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    ConfigurationObserver {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /** RPC scheduler to use for the region server. */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  final LongAdder requestCount = new LongAdder();<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  final LongAdder requestCount = new LongAdder();<a name="line.262"></a>
+<span class="sourceLineNo">261</span>  // Request counter for rpc get<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.262"></a>
 <span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  // Request counter for rpc get<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.265"></a>
+<span class="sourceLineNo">264</span>  // Request counter for rpc scan<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.265"></a>
 <span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  // Request counter for rpc scan<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.268"></a>
+<span class="sourceLineNo">267</span>  // Request counter for rpc multi<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Request counter for rpc multi<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.271"></a>
+<span class="sourceLineNo">270</span>  // Request counter for rpc mutate<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // Request counter for rpc mutate<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // Server to handle client requests.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  final RpcServerInterface rpcServer;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  final InetSocketAddress isa;<a name="line.278"></a>
+<span class="sourceLineNo">273</span>  // Server to handle client requests.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  final RpcServerInterface rpcServer;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  final InetSocketAddress isa;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private final HRegionServer regionServer;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private final long maxScannerResultSize;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private final HRegionServer regionServer;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private final long maxScannerResultSize;<a name="line.281"></a>
+<span class="sourceLineNo">280</span>  // The reference to the priority extraction function<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private final PriorityFunction priority;<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // The reference to the priority extraction function<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private final PriorityFunction priority;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private final long minimumScanTimeLimitDelta;<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>   * Row size threshold for multi requests above which a warning is logged<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private final int rowSizeWarnThreshold;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * An Rpc callback for closing a RegionScanner.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private final RegionScanner scanner;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.scanner = scanner;<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.scanner.close();<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><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    private final String scannerName;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final RegionScanner scanner;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final Lease lease;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.scannerName = scannerName;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.scanner = scanner;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.lease = lease;<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>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void run() throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      this.scanner.shipped();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (scanners.containsKey(scannerName)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lease != null) regionServer.leases.addLease(lease);<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * completion of multiGets.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public void addScanner(RegionScanner scanner) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.scanners.add(scanner);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    public void run() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (RegionScanner scanner : scanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        } catch (IOException e) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          LOG.error("Exception while closing the scanner " + scanner, e);<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>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static final class RegionScannerHolder {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final RegionScanner s;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    private final Region r;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    private final RpcCallback closeCallBack;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    private final RpcCallback shippedCallback;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    private byte[] rowOfLastPartialResult;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    private boolean needCursor;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public RegionScannerHolder(String scannerName, RegionScanner s, Region r,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.scannerName = scannerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.s = s;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      this.r = r;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      this.closeCallBack = closeCallBack;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      this.shippedCallback = shippedCallback;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.needCursor = needCursor;<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>    public long getNextCallSeq() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return nextCallSeq.get();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * closed<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private class ScannerListener implements LeaseListener {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    private final String scannerName;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    ScannerListener(final String n) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.scannerName = n;<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>    @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public void leaseExpired() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      if (rsh != null) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        RegionScanner s = rsh.s;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Region region = null;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        try {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            s.close();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } catch (IOException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), 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 {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<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>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                                                        final int index){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final ResultOrException.Builder builder, final int index) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return builder.setIndex(index).build();<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>   * Starts the nonce operation for a mutation, if needed.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutation Mutation.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param nonceGroup Nonce group from the request.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @returns whether to proceed this mutation.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    boolean canProceed = false;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (InterruptedException ex) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return canProceed;<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>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Ends nonce operation for a mutation, if needed.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param mutation Mutation.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      long nonceGroup, boolean success) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (result == null) return;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (clientCellBlockSupported) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      builder.setResult(pbr);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    builder.setStale(!isDefaultRegion);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (results.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (clientCellBlockSupported) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      for (Result res : results) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        builder.addCellsPerResult(res.size());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Result res : results) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        builder.addResults(pbr);<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>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Mutate a list of rows atomically.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   *<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param region<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param actions<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @throws IOException<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  private void mutateRows(final Region region,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name=

<TRUNCATED>

[16/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
index 87e1c5b..98776b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html
@@ -27,680 +27,678 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.commons.logging.Log;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.commons.logging.LogFactory;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Cell;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * &lt;p&gt;<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * reached<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * &lt;p&gt;<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.50"></a>
-<span class="sourceLineNo">051</span> */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceStability.Evolving<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public class ScannerContext {<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  LimitFields limits;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  LimitFields progress;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  NextState scannerState;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * has been made towards the limits so far.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * &lt;p&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * &lt;p&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * For example: &lt;pre&gt; {@code<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * RegionScanner scanner = ...<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * while(scanner.next(results, context)) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   *   // Do something with a batch of 5 cells<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * saved and considered in future invocations<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  boolean keepProgress;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.98"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.Cell;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * &lt;p&gt;<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * reached<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;p&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * &lt;p&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> */<a name="line.49"></a>
+<span class="sourceLineNo">050</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceStability.Evolving<a name="line.51"></a>
+<span class="sourceLineNo">052</span>public class ScannerContext {<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  LimitFields limits;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  LimitFields progress;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  NextState scannerState;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * has been made towards the limits so far.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * &lt;p&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * &lt;p&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * For example: &lt;pre&gt; {@code<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * RegionScanner scanner = ...<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * while(scanner.next(results, context)) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   *   // Do something with a batch of 5 cells<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * saved and considered in future invocations<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  boolean keepProgress;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private Cell lastPeekedCell = null;<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private Cell peekedCellInHeartbeat = null;<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>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  final ServerSideScanMetrics metrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.limits = new LimitFields();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // Progress fields are initialized to 0<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.keepProgress = keepProgress;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.scannerState = DEFAULT_STATE;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<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>  boolean isTrackingMetrics() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return this.metrics != null;<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>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  ServerSideScanMetrics getMetrics() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assert isTrackingMetrics();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return this.metrics;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  boolean getKeepProgress() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this.keepProgress = keepProgress;<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>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  void incrementBatchProgress(int batch) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    int currentBatch = progress.getBatch();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    progress.setBatch(currentBatch + batch);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    long curDataSize = progress.getDataSize();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    long curHeapSize = progress.getHeapSize();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    progress.setHeapSize(curHeapSize + heapSize);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  void updateTimeProgress() {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    progress.setTime(System.currentTimeMillis());<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>  int getBatchProgress() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return progress.getBatch();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  long getDataSizeProgress() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return progress.getHeapSize();<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>  long getTimeProgress() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    setBatchProgress(batchProgress);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    progress.setDataSize(dataSizeProgress);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    progress.setTime(timeProgress);<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * values<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  void clearProgress() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param state<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return The state that was passed in.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  NextState setScannerState(NextState state) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (!NextState.isValidState(state)) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    return state;<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>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   *         a limit in the middle of a row<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  boolean mayHaveMoreCellsInRow() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<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>   * @param checkerScope<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param checkerScope<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>  /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param checkerScope<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<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>   * @param checkerScope<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>  /**<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param scope The scope in which the size limit will be enforced<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    limits.setTimeScope(scope);<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>  int getBatchLimit() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return limits.getBatch();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  long getDataSizeLimit() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return limits.getDataSize();<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>  long getTimeLimit() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return limits.getTime();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  boolean checkBatchLimit(LimitScope checkerScope) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return hasBatchLimit(checkerScope) &amp;&amp; progress.getBatch() &gt;= limits.getBatch();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  boolean checkSizeLimit(LimitScope checkerScope) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return hasSizeLimit(checkerScope) &amp;&amp; (progress.getDataSize() &gt;= limits.getDataSize()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        || progress.getHeapSize() &gt;= limits.getHeapSize());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<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>   * @param checkerScope The scope that the limit is being checked from. The time limit is always<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *          checked against {@link System#currentTimeMillis()}<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  boolean checkTimeLimit(LimitScope checkerScope) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return hasTimeLimit(checkerScope) &amp;&amp; progress.getTime() &gt;= limits.getTime();<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>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param checkerScope The scope that the limits are being checked from<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return true when some limit is enforceable from the checker's scope and it has been reached<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  boolean checkAnyLimitReached(LimitScope checkerScope) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return checkSizeLimit(checkerScope) || checkBatchLimit(checkerScope)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        || checkTimeLimit(checkerScope);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Cell getPeekedCellInHeartbeat() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return peekedCellInHeartbeat;<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>  public void setPeekedCellInHeartbeat(Cell peekedCellInHeartbeat) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    this.peekedCellInHeartbeat = peekedCellInHeartbeat;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public String toString() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    StringBuilder sb = new StringBuilder();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    sb.append("{");<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    sb.append("limits:");<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    sb.append(limits);<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    sb.append(", progress:");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    sb.append(progress);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>    sb.append(", keepProgress:");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    sb.append(keepProgress);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append(", state:");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append(scannerState);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("}");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    return sb.toString();<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>  public static Builder newBuilder() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return new Builder();<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 static Builder newBuilder(boolean keepProgress) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return new Builder(keepProgress);<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 static final class Builder {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean keepProgress = DEFAULT_KEEP_PROGRESS;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    boolean trackMetrics = false;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    LimitFields limits = new LimitFields();<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private Builder() {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private Builder(boolean keepProgress) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.keepProgress = keepProgress;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public Builder setKeepProgress(boolean keepProgress) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.keepProgress = keepProgress;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return this;<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>    public Builder setTrackMetrics(boolean trackMetrics) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.trackMetrics = trackMetrics;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return this;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public Builder setSizeLimit(LimitScope sizeScope, long dataSizeLimit, long heapSizeLimit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      limits.setDataSize(dataSizeLimit);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      limits.setHeapSize(heapSizeLimit);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      limits.setSizeScope(sizeScope);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return this;<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 Builder setTimeLimit(LimitScope timeScope, long timeLimit) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      limits.setTime(timeLimit);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      limits.setTimeScope(timeScope);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return this;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public Builder setBatchLimit(int batchLimit) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      limits.setBatch(batchLimit);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return this;<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>    public ScannerContext build() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      return new ScannerContext(keepProgress, limits, trackMetrics);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * The possible states a scanner may be in following a call to {@link InternalScanner#next(List)}<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public enum NextState {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    MORE_VALUES(true, false),<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    NO_MORE_VALUES(false, false),<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    SIZE_LIMIT_REACHED(true, true),<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>     * Special case of size limit reached to indicate that the size limit was reached in the middle<a name="line.427"></a>
-<span class="sourceLineNo">428</span>     * of a row and thus a partial results was formed<a name="line.428"></a>
-<span class="sourceLineNo">429</span>     */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    SIZE_LIMIT_REACHED_MID_ROW(true, true),<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    TIME_LIMIT_REACHED(true, true),<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>     * Special case of time limit reached to indicate that the time limit was reached in the middle<a name="line.434"></a>
-<span class="sourceLineNo">435</span>     * of a row and thus a partial results was formed<a name="line.435"></a>
-<span class="sourceLineNo">436</span>     */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    TIME_LIMIT_REACHED_MID_ROW(true, true),<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    BATCH_LIMIT_REACHED(true, true);<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    private boolean moreValues;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    private boolean limitReached;<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private NextState(boolean moreValues, boolean limitReached) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      this.moreValues = moreValues;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      this.limitReached = limitReached;<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>    /**<a name="line.448"></a>
-<span class="sourceLineNo">449</span>     * @return true when the state indicates that more values may follow those that have been<a name="line.449"></a>
-<span class="sourceLineNo">450</span>     *         returned<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    public boolean hasMoreValues() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return this.moreValues;<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>     * @return true when the state indicates that a limit has been reached and scan should stop<a name="line.457"></a>
-<span class="sourceLineNo">458</span>     */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    public boolean limitReached() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      return this.limitReached;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>    public static boolean isValidState(NextState state) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return state != null;<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>    public static boolean hasMoreValues(NextState state) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return isValidState(state) &amp;&amp; state.hasMoreValues();<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>  /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * The various scopes where a limit can be enforced. Used to differentiate when a limit should be<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * enforced or not.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public enum LimitScope {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    /**<a name="line.477"></a>
-<span class="sourceLineNo">478</span>     * Enforcing a limit between rows means that the limit will not be considered until all the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>     * cells for a particular row have been retrieved<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    BETWEEN_ROWS(0),<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>     * Enforcing a limit between cells means that the limit will be considered after each full cell<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * has been retrieved<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    BETWEEN_CELLS(1);<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>     * When enforcing a limit, we must check that the scope is appropriate for enforcement.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>     * &lt;p&gt;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>     * To communicate this concept, each scope has a depth. A limit will be enforced if the depth of<a name="line.492"></a>
-<span class="sourceLineNo">493</span>     * the checker's scope is less than or equal to the limit's scope. This means that when checking<a name="line.493"></a>
-<span class="sourceLineNo">494</span>     * limits, the checker must know their own scope (i.e. are they checking the limits between<a name="line.494"></a>
-<span class="sourceLineNo">495</span>     * rows, between cells, etc...)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int depth;<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    LimitScope(int depth) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.depth = depth;<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>    int depth() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return depth;<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>     * @param checkerScope The scope in which the limit is being checked<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     * @return true when the checker is in a scope that indicates the limit can be enforced. Limits<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *         can be enforced from "higher or equal" scopes (i.e. the checker's scope is at a<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *         lesser depth than the limit)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    boolean canEnforceLimitFromScope(LimitScope checkerScope) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      return checkerScope != null &amp;&amp; checkerScope.depth() &lt;= depth;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * The different fields that can be used as limits in calls to<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * {@link InternalScanner#next(java.util.List)} and {@link RegionScanner#next(java.util.List)}<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private static class LimitFields {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Default values of the limit fields. Defined such that if a field does NOT change from its<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     * default, it will not be enforced<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     */<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    private static int DEFAULT_BATCH = -1;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    private static long DEFAULT_SIZE = -1L;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    private static long DEFAULT_TIME = -1L;<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>     * Default scope that is assigned to a limit if a scope is not specified.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    private static final LimitScope DEFAULT_SCOPE = LimitScope.BETWEEN_ROWS;<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    // The batch limit will always be enforced between cells, thus, there isn't a field to hold the<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // batch scope<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    int batch = DEFAULT_BATCH;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    LimitScope sizeScope = DEFAULT_SCOPE;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // The sum of cell data sizes(key + value). The Cell data might be in on heap or off heap area.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    long dataSize = DEFAULT_SIZE;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    // The sum of heap space occupied by all tracked cells. This includes Cell POJO's overhead as<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    // such AND data cells of Cells which are in on heap area.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long heapSize = DEFAULT_SIZE;<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>    LimitScope timeScope = DEFAULT_SCOPE;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    long time = DEFAULT_TIME;<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     * Fields keep their default values.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>     */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    LimitFields() {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    LimitFields(int batch, LimitScope sizeScope, long size, long heapSize, LimitScope timeScope,<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        long time) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      setFields(batch, sizeScope, size, heapSize, timeScope, time);<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>    void copy(LimitFields limitsToCopy) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      if (limitsToCopy != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        setFields(limitsToCopy.getBatch(), limitsToCopy.getSizeScope(), limitsToCopy.getDataSize(),<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            limitsToCopy.getHeapSize(), limitsToCopy.getTimeScope(), limitsToCopy.getTime());<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<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>     * Set all fields together.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>     * @param batch<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * @param sizeScope<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     * @param dataSize<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    void setFields(int batch, LimitScope sizeScope, long dataSize, long heapSize,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        LimitScope timeScope, long time) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      setBatch(batch);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      setSizeScope(sizeScope);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      setDataSize(dataSize);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      setHeapSize(heapSize);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      setTimeScope(timeScope);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      setTime(time);<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>    int getBatch() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.batch;<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>    void setBatch(int batch) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.batch = batch;<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>     * @param checkerScope<a name="line.593"></a>
-<span class="sourceLineNo">594</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.594"></a>
-<span class="sourceLineNo">595</span>     */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    boolean canEnforceBatchLimitFromScope(LimitScope checkerScope) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return LimitScope.BETWEEN_CELLS.canEnforceLimitFromScope(checkerScope);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    long getDataSize() {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      return this.dataSize;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    long getHeapSize() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.heapSize;<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>    void setDataSize(long dataSize) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      this.dataSize = dataSize;<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>    void setHeapSize(long heapSize) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      this.heapSize = heapSize;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>     * @return {@link LimitScope} indicating scope in which the size limit is enforced<a name="line.617"></a>
-<span class="sourceLineNo">618</span>     */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    LimitScope getSizeScope() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.sizeScope;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>     * Change the scope in which the size limit is enforced<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    void setSizeScope(LimitScope scope) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      this.sizeScope = scope;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>     * @param checkerScope<a name="line.631"></a>
-<span class="sourceLineNo">632</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean canEnforceSizeLimitFromScope(LimitScope checkerScope) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.sizeScope.canEnforceLimitFromScope(checkerScope);<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>    long getTime() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      return this.time;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    void setTime(long time) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.time = time;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>    /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * @return {@link LimitScope} indicating scope in which the time limit is enforced<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    LimitScope getTimeScope() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.timeScope;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     * Change the scope in which the time limit is enforced<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     */<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    void setTimeScope(LimitScope scope) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      this.timeScope = scope;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * @param checkerScope<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    boolean canEnforceTimeLimitFromScope(LimitScope checkerScope) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return this.timeScope.canEnforceLimitFromScope(checkerScope);<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>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public String toString() {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      StringBuilder sb = new StringBuilder();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      sb.append("{");<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>      sb.append("batch:");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      sb.append(batch);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>      sb.append(", dataSize:");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      sb.append(dataSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      sb.append(", heapSize:");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      sb.append(heapSize);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      sb.append(", sizeScope:");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      sb.append(sizeScope);<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span>      sb.append(", time:");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      sb.append(time);<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>      sb.append(", timeScope:");<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      sb.append(timeScope);<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>      sb.append("}");<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      return sb.toString();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span>}<a name="line.695"></a>
+<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  final ServerSideScanMetrics metrics;<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.limits = new LimitFields();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // Progress fields are initialized to 0<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.keepProgress = keepProgress;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.scannerState = DEFAULT_STATE;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  boolean isTrackingMetrics() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return this.metrics != null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  ServerSideScanMetrics getMetrics() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    assert isTrackingMetrics();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return this.metrics;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  boolean getKeepProgress() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.keepProgress = keepProgress;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  void incrementBatchProgress(int batch) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    int currentBatch = progress.getBatch();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    progress.setBatch(currentBatch + batch);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<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>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    long curDataSize = progress.getDataSize();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    long curHeapSize = progress.getHeapSize();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    progress.setHeapSize(curHeapSize + heapSize);<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>  /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  void updateTimeProgress() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    progress.setTime(System.currentTimeMillis());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  int getBatchProgress() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return progress.getBatch();<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>  long getDataSizeProgress() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return progress.getHeapSize();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  long getTimeProgress() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    setBatchProgress(batchProgress);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    progress.setDataSize(dataSizeProgress);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    progress.setTime(timeProgress);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * values<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void clearProgress() {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * @param state<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @return The state that was passed in.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  NextState setScannerState(NextState state) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!NextState.isValidState(state)) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return state;<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>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   *         a limit in the middle of a row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  boolean mayHaveMoreCellsInRow() {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<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>   * @param checkerScope<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param checkerScope<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>   * @param checkerScope<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<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>  /**<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @param checkerScope<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>   * @param scope The scope in which the size limit will be enforced<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    limits.setTimeSco

<TRUNCATED>

[43/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 7e1ad78..db68c65 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2017 The Apache Software Foundation</copyright>
     <item>
       <title>File: 2024,
-             Errors: 12792,
+             Errors: 12788,
              Warnings: 0,
              Infos: 0
       </title>
@@ -6999,7 +6999,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -15973,7 +15973,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  26
+                  25
                 </td>
               </tr>
                           <tr>
@@ -21909,7 +21909,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  148
+                  145
                 </td>
               </tr>
                           <tr>
@@ -23687,7 +23687,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  2
                 </td>
               </tr>
                           <tr>
@@ -27985,7 +27985,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  14
+                  12
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index d22d6e0..1de4cd1 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -380,7 +380,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index b7a52f1..243db52 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -679,7 +679,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 6379409..618bd73 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -527,7 +527,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index f07ef52..f310c4a 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -722,7 +722,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 43ba82f..d765cd1 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -318,7 +318,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 7fa166a..819ff9d 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <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" />
@@ -912,7 +912,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 73e3eaa..272b99a 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3836,21 +3836,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Wed Aug  9 18:36:23 UTC 2017"</code></td>
+<td class="colLast"><code>"Thu Aug 10 14:40:12 UTC 2017"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"794a3b104bf62d028fc8ae27596c3b98ef87e507"</code></td>
+<td class="colLast"><code>"624652373e6fb11a7aee0ce8bcfb7a394ed89dcb"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"6ce15c7f0bdbe861f872fdd126801909"</code></td>
+<td class="colLast"><code>"e53f3223b937b85695ec877f367c9fc2"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -15651,19 +15651,61 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.EXPIRATION_TIME">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_EXPIRATION_TIME">
 <!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
-<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#EXPIRATION_TIME">EXPIRATION_TIME</a></code></td>
+</a><code>public&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_EXPIRATION_TIME">DEFAULT_EXPIRATION_TIME</a></code></td>
 <td class="colLast"><code>60000L</code></td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.MAX_TASKS">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_MAX_TASKS">
 <!--   -->
-</a><code>static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MAX_TASKS">MAX_TASKS</a></code></td>
+</a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_MAX_TASKS">DEFAULT_MAX_TASKS</a></code></td>
 <td class="colLast"><code>1000</code></td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_MONITOR_INTERVAL">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_MONITOR_INTERVAL">DEFAULT_MONITOR_INTERVAL</a></code></td>
+<td class="colLast"><code>10000L</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_RPC_WARN_TIME">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_RPC_WARN_TIME">DEFAULT_RPC_WARN_TIME</a></code></td>
+<td class="colLast"><code>0L</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.EXPIRATION_TIME_KEY">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#EXPIRATION_TIME_KEY">EXPIRATION_TIME_KEY</a></code></td>
+<td class="colLast"><code>"hbase.taskmonitor.expiration.time"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.MAX_TASKS_KEY">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MAX_TASKS_KEY">MAX_TASKS_KEY</a></code></td>
+<td class="colLast"><code>"hbase.taskmonitor.max.tasks"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.MONITOR_INTERVAL_KEY">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MONITOR_INTERVAL_KEY">MONITOR_INTERVAL_KEY</a></code></td>
+<td class="colLast"><code>"hbase.taskmonitor.monitor.interval"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.monitoring.TaskMonitor.RPC_WARN_TIME_KEY">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#RPC_WARN_TIME_KEY">RPC_WARN_TIME_KEY</a></code></td>
+<td class="colLast"><code>"hbase.taskmonitor.rpc.warn.time"</code></td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 5f60543..9ec3f1e 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -20446,6 +20446,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#currValueLen">currValueLen</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#cursor">cursor</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#cursor--">cursor()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">Cursor</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>
 <div class="block">Scan cursor to tell client where server is scanning
@@ -20455,6 +20459,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Cursor.html#Cursor-byte:A-">Cursor(byte[])</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">cursor()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></dt>
+<dd>
+<div class="block">Get the scan cursor if available.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Result.html#cursor">cursor</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ScannerCallable.html#cursor">cursor</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></dt>
@@ -21745,6 +21753,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureConstants.html#DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION">DEFAULT_EXECUTOR_ABORT_ON_CORRUPTION</a></span> - Static variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/MasterProcedureConstants.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureConstants</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_EXPIRATION_TIME">DEFAULT_EXPIRATION_TIME</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#DEFAULT_EXTRA_FREE_FACTOR">DEFAULT_EXTRA_FREE_FACTOR</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#DEFAULT_FLUSH_PER_CHANGES">DEFAULT_FLUSH_PER_CHANGES</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
@@ -22074,6 +22084,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#DEFAULT_MAX_SYNC_FAILURE_ROLL">DEFAULT_MAX_SYNC_FAILURE_ROLL</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_MAX_TASKS">DEFAULT_MAX_TASKS</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER">DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.html#DEFAULT_MAX_VERSIONS">DEFAULT_MAX_VERSIONS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">ColumnFamilyDescriptorBuilder</a></dt>
@@ -22167,6 +22179,8 @@
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
 &nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_MONITOR_INTERVAL">DEFAULT_MONITOR_INTERVAL</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.MoveCostFunction.html#DEFAULT_MOVE_COST">DEFAULT_MOVE_COST</a></span> - Static variable in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.MoveCostFunction.html" title="class in org.apache.hadoop.hbase.master.balancer">StochasticLoadBalancer.MoveCostFunction</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RegionMover.html#DEFAULT_MOVE_RETRIES_MAX">DEFAULT_MOVE_RETRIES_MAX</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util">RegionMover</a></dt>
@@ -22362,6 +22376,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#DEFAULT_ROWLOCK_WAIT_DURATION">DEFAULT_ROWLOCK_WAIT_DURATION</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_RPC_WARN_TIME">DEFAULT_RPC_WARN_TIME</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html#DEFAULT_RS_RPC_STARTUP_WAIT_TIME">DEFAULT_RS_RPC_STARTUP_WAIT_TIME</a></span> - Static variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.html" title="class in org.apache.hadoop.hbase.master.procedure">RSProcedureDispatcher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html#DEFAULT_SCANNER_ORDER">DEFAULT_SCANNER_ORDER</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/SegmentScanner.html" title="class in org.apache.hadoop.hbase.regionserver">SegmentScanner</a></dt>
@@ -28135,12 +28151,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.html#expEvaluator">expEvaluator</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.html" title="class in org.apache.hadoop.hbase.security.visibility">VisibilityLabelFilter</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#EXPIRATION_TIME">EXPIRATION_TIME</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#EXPIRATION_TIME_KEY">EXPIRATION_TIME_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/AuthenticationKey.html#expirationDate">expirationDate</a></span> - Variable in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/AuthenticationKey.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationKey</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenIdentifier.html#expirationDate">expirationDate</a></span> - Variable in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/AuthenticationTokenIdentifier.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenIdentifier</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#expirationTime">expirationTime</a></span> - Variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/Leases.Lease.html#expirationTime">expirationTime</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.Tick.html#expirationTimeInMillis">expirationTimeInMillis</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.Tick.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CurrentHourProvider.Tick</a></dt>
@@ -38634,6 +38652,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ClusterStatus.html#getLastMajorCompactionTsForTable-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTsForTable(TableName)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ClusterStatus.html" title="class in org.apache.hadoop.hbase">ClusterStatus</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#getLastPeekedCell--">getLastPeekedCell()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getLastProcId--">getLastProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaState.html#getLastQuery--">getLastQuery()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaState.html" title="class in org.apache.hadoop.hbase.quotas">QuotaState</a></dt>
@@ -42293,8 +42313,6 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/HBaseAdmin.html#getPauseTime-int-">getPauseTime(int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/HBaseAdmin.html" title="class in org.apache.hadoop.hbase.client">HBaseAdmin</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#getPeekedCellInHeartbeat--">getPeekedCellInHeartbeat()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeer.html#getPeerBandwidth--">getPeerBandwidth()</a></span> - Method in interface org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeer.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeer</a></dt>
 <dd>
 <div class="block">Get the per node bandwidth upper limit for this peer</div>
@@ -50207,6 +50225,10 @@
 <dd>
 <div class="block">Get a copy of the wals of the recovered sources on this rs</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getWarnTime--">getWarnTime()</a></span> - Method in interface org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getWarnTime--">getWarnTime()</a></span> - Method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html" title="class in org.apache.hadoop.hbase.monitoring">MonitoredTaskImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html#getWatcher--">getWatcher()</a></span> - Method in class org.apache.hadoop.hbase.procedure.<a href="org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure">ZKProcedureUtil</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZooKeeperListener.html#getWatcher--">getWatcher()</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZooKeeperListener.html" title="class in org.apache.hadoop.hbase.zookeeper">ZooKeeperListener</a></dt>
@@ -62014,6 +62036,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CellUtil.LastOnRowColCell.html#LastOnRowColCell-byte:A-int-short-byte:A-int-byte-byte:A-int-int-">LastOnRowColCell(byte[], int, short, byte[], int, byte, byte[], int, int)</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CellUtil.LastOnRowColCell.html" title="class in org.apache.hadoop.hbase">CellUtil.LastOnRowColCell</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#lastPeekedCell">lastPeekedCell</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#lastProcId">lastProcId</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaState.html#lastQuery">lastQuery</a></span> - Variable in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaState.html" title="class in org.apache.hadoop.hbase.quotas">QuotaState</a></dt>
@@ -67591,7 +67615,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TagUtil.html#MAX_TAGS_LENGTH">MAX_TAGS_LENGTH</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TagUtil.html" title="class in org.apache.hadoop.hbase">TagUtil</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MAX_TASKS">MAX_TASKS</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MAX_TASKS_KEY">MAX_TASKS_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/Canary.html#MAX_THREADS_NUM">MAX_THREADS_NUM</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/Canary.html" title="class in org.apache.hadoop.hbase.tool">Canary</a></dt>
 <dd>&nbsp;</dd>
@@ -67962,6 +67986,8 @@
 <dd>
 <div class="block">Max tags length</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#maxTasks">maxTasks</a></span> - Variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxTerminationWait">maxTerminationWait</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxThreads">maxThreads</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
@@ -70800,6 +70826,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.Monitor.html#Monitor--">Monitor()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.Monitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor.Monitor</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MONITOR_INTERVAL_KEY">MONITOR_INTERVAL_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/RpcServer.html#MONITORED_RPC">MONITORED_RPC</a></span> - Static variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/RpcServer.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer</a></dt>
 <dd>
 <div class="block">Keeps MonitoredRPCHandler per handler thread.</div>
@@ -70824,12 +70852,18 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#MonitoredTaskImpl--">MonitoredTaskImpl()</a></span> - Constructor for class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html" title="class in org.apache.hadoop.hbase.monitoring">MonitoredTaskImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#monitorInterval">monitorInterval</a></span> - Variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#monitorRegionServers-java.util.Map-">monitorRegionServers(Map&lt;String, List&lt;HRegionInfo&gt;&gt;)</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.RegionServerMonitor</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#MonitorRunnable--">MonitorRunnable()</a></span> - Constructor for class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.MonitorRunnable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/CloneSnapshotProcedure.html#monitorStatus">monitorStatus</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/CloneSnapshotProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">CloneSnapshotProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/RestoreSnapshotProcedure.html#monitorStatus">monitorStatus</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/RestoreSnapshotProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">RestoreSnapshotProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#monitorThread">monitorThread</a></span> - Variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.html#monitorThread">monitorThread</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/MobUtils.html#MONTHLY_THRESHOLD_MULTIPLIER">MONTHLY_THRESHOLD_MULTIPLIER</a></span> - Static variable in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/MobUtils.html" title="class in org.apache.hadoop.hbase.mob">MobUtils</a></dt>
@@ -76628,8 +76662,6 @@ service.</div>
 <dd>
 <div class="block">Retrieve the next byte from this range without incrementing position.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#peekedCellInHeartbeat">peekedCellInHeartbeat</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/NamespaceTableCfWALEntryFilter.html#peer">peer</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/NamespaceTableCfWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication">NamespaceTableCfWALEntryFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#PEER_CONFIG_PREFIX">PEER_CONFIG_PREFIX</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.replication.<a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html" title="class in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication</a></dt>
@@ -83355,7 +83387,7 @@ service.</div>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client"><span class="typeNameLink">RawScanResultConsumer.ScanController</span></a> - Interface in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client"><span class="typeNameLink">RawScanResultConsumer.ScanResumer</span></a> - Interface in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>
@@ -91547,6 +91579,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationTableBase.html#RPC_TIMEOUT">RPC_TIMEOUT</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationTableBase.html" title="class in org.apache.hadoop.hbase.replication">ReplicationTableBase</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#RPC_WARN_TIME_KEY">RPC_WARN_TIME_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/MasterCallable.html#rpcCall--">rpcCall()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/MasterCallable.html" title="class in org.apache.hadoop.hbase.client">MasterCallable</a></dt>
 <dd>
 <div class="block">Run the RPC call.</div>
@@ -91911,6 +91945,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/MetricsConnection.html#rpcTimers">rpcTimers</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#rpcWarnTime">rpcWarnTime</a></span> - Variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#rq">rq</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.NodeFailoverWorker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.html#rqc">rqc</a></span> - Variable in class org.apache.hadoop.hbase.replication.master.<a href="org/apache/hadoop/hbase/replication/master/ReplicationHFileCleaner.html" title="class in org.apache.hadoop.hbase.replication.master">ReplicationHFileCleaner</a></dt>
@@ -92330,6 +92366,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/MobFileCache.EvictionThread.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/MobFileCache.EvictionThread.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache.EvictionThread</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.MonitorRunnable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.TimeoutExecutorThread</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.WorkerMonitor</a></dt>
@@ -92602,6 +92640,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/ClusterSchemaServiceImpl.html#running">running</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ClusterSchemaServiceImpl.html" title="class in org.apache.hadoop.hbase.master">ClusterSchemaServiceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#running">running</a></span> - Variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.MonitorRunnable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html#running">running</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html" title="class in org.apache.hadoop.hbase.procedure2">AbstractProcedureScheduler</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#running">running</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a></dt>
@@ -93083,7 +93123,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HashTable.TableHash.html#scanBatch">scanBatch</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HashTable.TableHash.html" title="class in org.apache.hadoop.hbase.mapreduce">HashTable.TableHash</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#ScanControllerImpl--">ScanControllerImpl()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#ScanControllerImpl-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse-">ScanControllerImpl(ClientProtos.ScanResponse)</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html#ScanControllerState--">ScanControllerState()</a></span> - Constructor for enum org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</a></dt>
 <dd>&nbsp;</dd>
@@ -97040,6 +97080,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html#setLastHost-org.apache.hadoop.hbase.ServerName-">setLastHost(ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#setLastPeekedCell-org.apache.hadoop.hbase.Cell-">setLastPeekedCell(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.WALEntryBatch.html#setLastPosition-java.lang.String-java.lang.Long-">setLastPosition(String, Long)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader.WALEntryBatch</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RegionSplitter.HexStringSplit.html#setLastRow-java.lang.String-">setLastRow(String)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RegionSplitter.HexStringSplit.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter.HexStringSplit</a></dt>
@@ -97823,8 +97865,6 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html#setPathSpec-java.lang.String:A-">setPathSpec(String[])</a></span> - Method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html" title="class in org.apache.hadoop.hbase.http">HttpServer.Builder</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html#setPeekedCellInHeartbeat-org.apache.hadoop.hbase.Cell-">setPeekedCellInHeartbeat(Cell)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html#setPeerTableCFs-java.lang.String-java.util.Map-">setPeerTableCFs(String, Map&lt;TableName, ? extends Collection&lt;String&gt;&gt;)</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/ReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">ReplicationAdmin</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
@@ -99489,6 +99529,10 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#setWALTrailer-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer-">setWALTrailer(WALProtos.WALTrailer)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractProtobufLogWriter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setWarnTime-long-">setWarnTime(long)</a></span> - Method in interface org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setWarnTime-long-">setWarnTime(long)</a></span> - Method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html" title="class in org.apache.hadoop.hbase.monitoring">MonitoredTaskImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#setWatchIfNodeExists-org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher-java.lang.String-">setWatchIfNodeExists(ZooKeeperWatcher, String)</a></span> - Static method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKUtil</a></dt>
 <dd>
 <div class="block">Watch the specified znode, but only if exists.</div>
@@ -100083,6 +100127,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/MobFileCache.html#shutdown--">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#shutdown--">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.RegionEnvironment.html#shutdown--">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.RegionEnvironment.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost.RegionEnvironment</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.RegionServerEnvironment.html#shutdown--">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.RegionServerEnvironment.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost.RegionServerEnvironment</a></dt>
@@ -106926,7 +106972,9 @@ service.</div>
 <dd>
 <div class="block">Singleton which keeps track of tasks going on in this VM.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#TaskMonitor--">TaskMonitor()</a></span> - Constructor for class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#TaskMonitor-org.apache.hadoop.conf.Configuration-">TaskMonitor(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.MonitorRunnable</span></a> - Class in <a href="org/apache/hadoop/hbase/monitoring/package-summary.html">org.apache.hadoop.hbase.monitoring</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.PassthroughInvocationHandler</span></a>&lt;<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="type parameter in TaskMonitor.PassthroughInvocationHandler">T</a>&gt; - Class in <a href="org/apache/hadoop/hbase/monitoring/package-summary.html">org.apache.hadoop.hbase.monitoring</a></dt>
 <dd>
@@ -115952,10 +116000,14 @@ the order they are declared.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/RpcServer.html#warnResponseTime">warnResponseTime</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/RpcServer.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html#warnStuckTasks--">warnStuckTasks()</a></span> - Method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.html#warnThresholdMs">warnThresholdMs</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a></dt>
 <dd>
 <div class="block">log WARN if we detect a pause longer than this threshold</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#warnTime">warnTime</a></span> - Variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html" title="class in org.apache.hadoop.hbase.monitoring">MonitoredTaskImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted()</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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/exceptions/PreemptiveFastFailException.html#wasOperationAttemptedByServer--">wasOperationAttemptedByServer()</a></span> - Method in exception org.apache.hadoop.hbase.exceptions.<a href="org/apache/hadoop/hbase/exceptions/PreemptiveFastFailException.html" title="class in org.apache.hadoop.hbase.exceptions">PreemptiveFastFailException</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 707f172..4af64c0 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
index c898b08..944dfd7 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -4539,18 +4539,18 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">HStoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html#lastKey">lastKey</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ScannerContext.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#lastPeekedCell">lastPeekedCell</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">KeyValueScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#NO_NEXT_INDEXED_KEY">NO_NEXT_INDEXED_KEY</a></span></code>
 <div class="block">The byte array represents for NO_NEXT_INDEXED_KEY;
  The actual value is irrelevant because this is always compared by reference.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ScannerContext.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#peekedCellInHeartbeat">peekedCellInHeartbeat</a></span></code>&nbsp;</td>
-</tr>
 <tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">StoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#prevCell">prevCell</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
@@ -4724,51 +4724,51 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">HStoreFile.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html#getLastKey--">getLastKey</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ScannerContext.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getLastPeekedCell--">getLastPeekedCell</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AbstractMemStore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#getLowest-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-">getLowest</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;a,
          <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;b)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">StoreFileScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#getNextIndexedKey--">getNextIndexedKey</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">StoreScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#getNextIndexedKey--">getNextIndexedKey</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">KeyValueScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getNextIndexedKey--">getNextIndexedKey</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">SegmentScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/SegmentScanner.html#getNextIndexedKey--">getNextIndexedKey</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">KeyValueHeap.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#getNextIndexedKey--">getNextIndexedKey</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">NonLazyKeyValueScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.html#getNextIndexedKey--">getNextIndexedKey</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">CompactingMemStore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.html#getNextRow-org.apache.hadoop.hbase.Cell-">getNextRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">DefaultMemStore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultMemStore.html#getNextRow-org.apache.hadoop.hbase.Cell-">getNextRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AbstractMemStore.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/AbstractMemStore.html#getNextRow-org.apache.hadoop.hbase.Cell-java.util.NavigableSet-">getNextRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key,
           <a href="http://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;set)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ScannerContext.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getPeekedCellInHeartbeat--">getPeekedCellInHeartbeat</a></span>()</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><span class="typeNameLabel">CellSet.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/CellSet.html#higher-org.apache.hadoop.hbase.Cell-">higher</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;e)</code>&nbsp;</td>
@@ -6049,8 +6049,8 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">StoreFileScanner.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#setCurrentCell-org.apache.hadoop.hbase.Cell-">setCurrentCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;newVal)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ScannerContext.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#setPeekedCellInHeartbeat-org.apache.hadoop.hbase.Cell-">setPeekedCellInHeartbeat</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;peekedCellInHeartbeat)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><span class="typeNameLabel">ScannerContext.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#setLastPeekedCell-org.apache.hadoop.hbase.Cell-">setLastPeekedCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;lastPeekedCell)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Public.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Public.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Public.html
index 6fc097a..5609dff 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Public.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Public.html
@@ -888,7 +888,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <tr class="altColor">
 <td class="colFirst"><code>static interface&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></span></code>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="rowColor">

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


[17/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index 9a8f45d..665ad9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -26,3462 +26,3459 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.net.BindException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.nio.ByteBuffer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Iterator;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.NavigableMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.TreeSet;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ConcurrentMap;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.LongAdder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.Path;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HConstants;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ServerName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.TableName;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Append;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Get;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Put;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Result;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.User;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.zookeeper.KeeperException;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<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> * Implements the regionserver RPC services.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>@InterfaceAudience.Private<a name="line.229"></a>
-<span class="sourceLineNo">230</span>@SuppressWarnings("deprecation")<a name="line.230"></a>
-<span class="sourceLineNo">231</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    ConfigurationObserver {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /** RPC scheduler to use for the region server. */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.259"></a>
+<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.InterruptedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.BindException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.net.InetSocketAddress;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.UnknownHostException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.ByteBuffer;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Arrays;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.NavigableMap;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.TreeSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.atomic.LongAdder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.commons.logging.Log;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.logging.LogFactory;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ServerName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Append;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Get;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Put;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Result;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.User;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.zookeeper.KeeperException;<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> * Implements the regionserver RPC services.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>@InterfaceAudience.Private<a name="line.226"></a>
+<span class="sourceLineNo">227</span>@SuppressWarnings("deprecation")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    ConfigurationObserver {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /** RPC scheduler to use for the region server. */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  final LongAdder requestCount = new LongAdder();<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  final LongAdder requestCount = new LongAdder();<a name="line.262"></a>
+<span class="sourceLineNo">261</span>  // Request counter for rpc get<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.262"></a>
 <span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  // Request counter for rpc get<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.265"></a>
+<span class="sourceLineNo">264</span>  // Request counter for rpc scan<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.265"></a>
 <span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  // Request counter for rpc scan<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.268"></a>
+<span class="sourceLineNo">267</span>  // Request counter for rpc multi<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Request counter for rpc multi<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.271"></a>
+<span class="sourceLineNo">270</span>  // Request counter for rpc mutate<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // Request counter for rpc mutate<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // Server to handle client requests.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  final RpcServerInterface rpcServer;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  final InetSocketAddress isa;<a name="line.278"></a>
+<span class="sourceLineNo">273</span>  // Server to handle client requests.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  final RpcServerInterface rpcServer;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  final InetSocketAddress isa;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private final HRegionServer regionServer;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private final long maxScannerResultSize;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private final HRegionServer regionServer;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private final long maxScannerResultSize;<a name="line.281"></a>
+<span class="sourceLineNo">280</span>  // The reference to the priority extraction function<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private final PriorityFunction priority;<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // The reference to the priority extraction function<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private final PriorityFunction priority;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private final long minimumScanTimeLimitDelta;<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>   * Row size threshold for multi requests above which a warning is logged<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private final int rowSizeWarnThreshold;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * An Rpc callback for closing a RegionScanner.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private final RegionScanner scanner;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.scanner = scanner;<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.scanner.close();<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><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    private final String scannerName;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final RegionScanner scanner;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final Lease lease;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.scannerName = scannerName;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.scanner = scanner;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.lease = lease;<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>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void run() throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      this.scanner.shipped();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (scanners.containsKey(scannerName)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lease != null) regionServer.leases.addLease(lease);<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * completion of multiGets.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public void addScanner(RegionScanner scanner) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.scanners.add(scanner);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    public void run() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (RegionScanner scanner : scanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        } catch (IOException e) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          LOG.error("Exception while closing the scanner " + scanner, e);<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>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static final class RegionScannerHolder {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final RegionScanner s;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    private final Region r;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    private final RpcCallback closeCallBack;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    private final RpcCallback shippedCallback;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    private byte[] rowOfLastPartialResult;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    private boolean needCursor;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public RegionScannerHolder(String scannerName, RegionScanner s, Region r,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.scannerName = scannerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.s = s;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      this.r = r;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      this.closeCallBack = closeCallBack;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      this.shippedCallback = shippedCallback;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.needCursor = needCursor;<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>    public long getNextCallSeq() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return nextCallSeq.get();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * closed<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private class ScannerListener implements LeaseListener {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    private final String scannerName;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    ScannerListener(final String n) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.scannerName = n;<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>    @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public void leaseExpired() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      if (rsh != null) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        RegionScanner s = rsh.s;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Region region = null;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        try {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            s.close();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } catch (IOException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), 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 {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<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>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                                                        final int index){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final ResultOrException.Builder builder, final int index) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return builder.setIndex(index).build();<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>   * Starts the nonce operation for a mutation, if needed.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutation Mutation.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param nonceGroup Nonce group from the request.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @returns whether to proceed this mutation.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    boolean canProceed = false;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (InterruptedException ex) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return canProceed;<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>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Ends nonce operation for a mutation, if needed.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param mutation Mutation.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      long nonceGroup, boolean success) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (result == null) return;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (clientCellBlockSupported) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      builder.setResult(pbr);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    builder.setStale(!isDefaultRegion);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (results.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (clientCellBlockSupported) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      for (Result res : results) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        builder.addCellsPerResult(res.size());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Result res : results) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        builder.addResults(pbr);<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>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Mutate a list of rows atomically.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   *<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param region<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param actions<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @throws IOException<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  private void mutateRows(final Region region,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    }<a name="line.552"></

<TRUNCATED>

[20/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
index 9a8f45d..665ad9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
@@ -26,3462 +26,3459 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.FileNotFoundException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.io.InterruptedIOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.net.BindException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.net.InetSocketAddress;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.net.UnknownHostException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.nio.ByteBuffer;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Iterator;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.List;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Map.Entry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.NavigableMap;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.Set;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.TreeSet;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ConcurrentMap;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.TimeUnit;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.LongAdder;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.Path;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.HConstants;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ServerName;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.TableName;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Append;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Get;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Put;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.Result;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.security.User;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.zookeeper.KeeperException;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<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> * Implements the regionserver RPC services.<a name="line.227"></a>
-<span class="sourceLineNo">228</span> */<a name="line.228"></a>
-<span class="sourceLineNo">229</span>@InterfaceAudience.Private<a name="line.229"></a>
-<span class="sourceLineNo">230</span>@SuppressWarnings("deprecation")<a name="line.230"></a>
-<span class="sourceLineNo">231</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    ConfigurationObserver {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>  /** RPC scheduler to use for the region server. */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.259"></a>
+<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.InterruptedIOException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.net.BindException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.net.InetSocketAddress;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.net.UnknownHostException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.nio.ByteBuffer;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Arrays;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Collections;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Iterator;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.NavigableMap;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.TreeSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.concurrent.ConcurrentMap;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.TimeUnit;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.atomic.LongAdder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.commons.lang.mutable.MutableObject;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.commons.logging.Log;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.commons.logging.LogFactory;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.conf.Configuration;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.ByteBufferCell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HConstants;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ServerName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Append;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Get;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Put;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.Result;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.ipc.RpcServerFactory;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.security.Superusers;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.security.User;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.Cache;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.shaded.com.google.common.cache.CacheBuilder;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.Message;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.RpcController;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.ServiceException;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.TextFormat;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.UnsafeByteOperations;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Action;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadRequest;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CleanupBulkLoadResponse;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.Condition;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetRequest;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.GetResponse;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRegionLoadStats;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiRequest;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MultiResponse;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateRequest;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutateResponse;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadRequest;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.PrepareBulkLoadResponse;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionAction;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ResultOrException;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameBytesPair;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse.TableQuotaSnapshot;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RPCProtos.RequestHeader;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.zookeeper.KeeperException;<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> * Implements the regionserver RPC services.<a name="line.224"></a>
+<span class="sourceLineNo">225</span> */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>@InterfaceAudience.Private<a name="line.226"></a>
+<span class="sourceLineNo">227</span>@SuppressWarnings("deprecation")<a name="line.227"></a>
+<span class="sourceLineNo">228</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    ConfigurationObserver {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  /** RPC scheduler to use for the region server. */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<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>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   * Default value of {@link RSRpcServices#BATCH_ROWS_THRESHOLD_NAME}<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   */<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  final LongAdder requestCount = new LongAdder();<a name="line.259"></a>
 <span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  final LongAdder requestCount = new LongAdder();<a name="line.262"></a>
+<span class="sourceLineNo">261</span>  // Request counter for rpc get<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.262"></a>
 <span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  // Request counter for rpc get<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  final LongAdder rpcGetRequestCount = new LongAdder();<a name="line.265"></a>
+<span class="sourceLineNo">264</span>  // Request counter for rpc scan<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.265"></a>
 <span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  // Request counter for rpc scan<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  final LongAdder rpcScanRequestCount = new LongAdder();<a name="line.268"></a>
+<span class="sourceLineNo">267</span>  // Request counter for rpc multi<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Request counter for rpc multi<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  final LongAdder rpcMultiRequestCount = new LongAdder();<a name="line.271"></a>
+<span class="sourceLineNo">270</span>  // Request counter for rpc mutate<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  // Request counter for rpc mutate<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  final LongAdder rpcMutateRequestCount = new LongAdder();<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  // Server to handle client requests.<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  final RpcServerInterface rpcServer;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  final InetSocketAddress isa;<a name="line.278"></a>
+<span class="sourceLineNo">273</span>  // Server to handle client requests.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  final RpcServerInterface rpcServer;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  final InetSocketAddress isa;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private final HRegionServer regionServer;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  private final long maxScannerResultSize;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private final HRegionServer regionServer;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private final long maxScannerResultSize;<a name="line.281"></a>
+<span class="sourceLineNo">280</span>  // The reference to the priority extraction function<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private final PriorityFunction priority;<a name="line.281"></a>
 <span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  // The reference to the priority extraction function<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  private final PriorityFunction priority;<a name="line.284"></a>
-<span class="sourceLineNo">285</span><a name="line.285"></a>
-<span class="sourceLineNo">286</span>  private ScannerIdGenerator scannerIdGenerator;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  private final ConcurrentMap&lt;String, RegionScannerHolder&gt; scanners = new ConcurrentHashMap&lt;&gt;();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  // Hold the name of a closed scanner for a while. This is used to keep compatible for old clients<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  // which may send next or close request to a region scanner which has already been exhausted. The<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  // entries will be removed automatically after scannerLeaseTimeoutPeriod.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Cache&lt;String, String&gt; closedScanners;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private final long minimumScanTimeLimitDelta;<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>   * Row size threshold for multi requests above which a warning is logged<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private final int rowSizeWarnThreshold;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  final AtomicBoolean clearCompactionQueues = new AtomicBoolean(false);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * An Rpc callback for closing a RegionScanner.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static final class RegionScannerCloseCallBack implements RpcCallback {<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private final RegionScanner scanner;<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>    public RegionScannerCloseCallBack(RegionScanner scanner) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      this.scanner = scanner;<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>    @Override<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    public void run() throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.scanner.close();<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><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>    private final String scannerName;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    private final RegionScanner scanner;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    private final Lease lease;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.scannerName = scannerName;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.scanner = scanner;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.lease = lease;<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>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public void run() throws IOException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      this.scanner.shipped();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (scanners.containsKey(scannerName)) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lease != null) regionServer.leases.addLease(lease);<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><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
-<span class="sourceLineNo">358</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * completion of multiGets.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;&gt;();<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>    public void addScanner(RegionScanner scanner) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      this.scanners.add(scanner);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    public void run() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (RegionScanner scanner : scanners) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        try {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scanner.close();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        } catch (IOException e) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          LOG.error("Exception while closing the scanner " + scanner, e);<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>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   */<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static final class RegionScannerHolder {<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    private final AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    private final String scannerName;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    private final RegionScanner s;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    private final Region r;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    private final RpcCallback closeCallBack;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    private final RpcCallback shippedCallback;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    private byte[] rowOfLastPartialResult;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    private boolean needCursor;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public RegionScannerHolder(String scannerName, RegionScanner s, Region r,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        RpcCallback closeCallBack, RpcCallback shippedCallback, boolean needCursor) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.scannerName = scannerName;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.s = s;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      this.r = r;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      this.closeCallBack = closeCallBack;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>      this.shippedCallback = shippedCallback;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      this.needCursor = needCursor;<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>    public long getNextCallSeq() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return nextCallSeq.get();<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public boolean incNextCallSeq(long currentSeq) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      // Use CAS to prevent multiple scan request running on the same scanner.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return nextCallSeq.compareAndSet(currentSeq, currentSeq + 1);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * closed<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private class ScannerListener implements LeaseListener {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    private final String scannerName;<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>    ScannerListener(final String n) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      this.scannerName = n;<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>    @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public void leaseExpired() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      if (rsh != null) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        RegionScanner s = rsh.s;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Region region = null;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>        try {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>          }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        } catch (IOException e) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        } finally {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          try {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>            s.close();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>              region.getCoprocessorHost().postScannerClose(s);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>            }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>          } catch (IOException e) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>            LOG.error("Closing scanner for " + s.getRegionInfo().getRegionNameAsString(), 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 {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          " scanner found, hence no chance to close that related scanner!");<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      }<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>  private static ResultOrException getResultOrException(final ClientProtos.Result r,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>                                                        final int index){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return getResultOrException(ResponseConverter.buildActionResult(r), index);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final ResultOrException.Builder builder, final int index) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return builder.setIndex(index).build();<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>   * Starts the nonce operation for a mutation, if needed.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutation Mutation.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param nonceGroup Nonce group from the request.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @returns whether to proceed this mutation.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  private boolean startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return true;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    boolean canProceed = false;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    } catch (InterruptedException ex) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    return canProceed;<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>  /**<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * Ends nonce operation for a mutation, if needed.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @param mutation Mutation.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      long nonceGroup, boolean success) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>  }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final HBaseRpcController rpcc, boolean clientCellBlockSupported) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (result == null) return;<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (clientCellBlockSupported) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      builder.setResult(pbr);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  private void addResults(ScanResponse.Builder builder, List&lt;Result&gt; results,<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      HBaseRpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    builder.setStale(!isDefaultRegion);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (results.isEmpty()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      return;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (clientCellBlockSupported) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      for (Result res : results) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        builder.addCellsPerResult(res.size());<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        builder.addPartialFlagPerResult(res.mayHaveMoreCellsInRow());<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      controller.setCellScanner(CellUtil.createCellScanner(results));<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    } else {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      for (Result res : results) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        builder.addResults(pbr);<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>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Mutate a list of rows atomically.<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   *<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param region<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param actions<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * @throws IOException<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   */<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  private void mutateRows(final Region region,<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final CellScanner cellScanner, RegionActionResult.Builder builder) throws IOException {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span

<TRUNCATED>

[34/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
index f661f1c..9e54690 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.65">StoreScanner</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.64">StoreScanner</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.html" title="class in org.apache.hadoop.hbase.regionserver">NonReversedNonLazyKeyValueScanner</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">InternalScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a></pre>
 <div class="block">Scanner scans both the memstore and the Store. Coalesce KeyValue stream into List&lt;KeyValue&gt;
@@ -295,7 +295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#preadMaxBytes">preadMaxBytes</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#prevCell">prevCell</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -716,7 +716,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <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/StoreScanner.html#line.67">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.66">LOG</a></pre>
 </li>
 </ul>
 <a name="store">
@@ -725,7 +725,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>store</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.69">store</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.68">store</a></pre>
 </li>
 </ul>
 <a name="matcher">
@@ -734,7 +734,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>matcher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">ScanQueryMatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.70">matcher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">ScanQueryMatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.69">matcher</a></pre>
 </li>
 </ul>
 <a name="heap">
@@ -743,7 +743,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>heap</h4>
-<pre>protected&nbsp;<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/StoreScanner.html#line.71">heap</a></pre>
+<pre>protected&nbsp;<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/StoreScanner.html#line.70">heap</a></pre>
 </li>
 </ul>
 <a name="cacheBlocks">
@@ -752,7 +752,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheBlocks</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.72">cacheBlocks</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.71">cacheBlocks</a></pre>
 </li>
 </ul>
 <a name="countPerRow">
@@ -761,7 +761,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>countPerRow</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.74">countPerRow</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.73">countPerRow</a></pre>
 </li>
 </ul>
 <a name="storeLimit">
@@ -770,7 +770,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>storeLimit</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.75">storeLimit</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.74">storeLimit</a></pre>
 </li>
 </ul>
 <a name="storeOffset">
@@ -779,7 +779,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>storeOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.76">storeOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.75">storeOffset</a></pre>
 </li>
 </ul>
 <a name="closing">
@@ -788,7 +788,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>closing</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.80">closing</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.79">closing</a></pre>
 </li>
 </ul>
 <a name="get">
@@ -797,7 +797,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.81">get</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.80">get</a></pre>
 </li>
 </ul>
 <a name="explicitColumnQuery">
@@ -806,7 +806,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>explicitColumnQuery</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.82">explicitColumnQuery</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.81">explicitColumnQuery</a></pre>
 </li>
 </ul>
 <a name="useRowColBloom">
@@ -815,7 +815,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>useRowColBloom</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.83">useRowColBloom</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.82">useRowColBloom</a></pre>
 </li>
 </ul>
 <a name="parallelSeekEnabled">
@@ -824,7 +824,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>parallelSeekEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.87">parallelSeekEnabled</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.86">parallelSeekEnabled</a></pre>
 <div class="block">A flag that enables StoreFileScanner parallel-seeking</div>
 </li>
 </ul>
@@ -834,7 +834,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>executor</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.88">executor</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.87">executor</a></pre>
 </li>
 </ul>
 <a name="scan">
@@ -843,7 +843,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.89">scan</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.88">scan</a></pre>
 </li>
 </ul>
 <a name="oldestUnexpiredTS">
@@ -852,7 +852,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>oldestUnexpiredTS</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.90">oldestUnexpiredTS</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.89">oldestUnexpiredTS</a></pre>
 </li>
 </ul>
 <a name="now">
@@ -861,7 +861,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>now</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.91">now</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.90">now</a></pre>
 </li>
 </ul>
 <a name="minVersions">
@@ -870,7 +870,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>minVersions</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.92">minVersions</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.91">minVersions</a></pre>
 </li>
 </ul>
 <a name="maxRowSize">
@@ -879,7 +879,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRowSize</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.93">maxRowSize</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.92">maxRowSize</a></pre>
 </li>
 </ul>
 <a name="cellsPerHeartbeatCheck">
@@ -888,7 +888,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>cellsPerHeartbeatCheck</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.94">cellsPerHeartbeatCheck</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.93">cellsPerHeartbeatCheck</a></pre>
 </li>
 </ul>
 <a name="scannersForDelayedClose">
@@ -897,7 +897,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>scannersForDelayedClose</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.101">scannersForDelayedClose</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.100">scannersForDelayedClose</a></pre>
 </li>
 </ul>
 <a name="kvsScanned">
@@ -906,7 +906,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>kvsScanned</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.107">kvsScanned</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.106">kvsScanned</a></pre>
 <div class="block">The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not
  KVs skipped via seeking to next row/column. TODO: estimate them?</div>
 </li>
@@ -917,7 +917,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>prevCell</h4>
-<pre>private&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/StoreScanner.html#line.108">prevCell</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/StoreScanner.html#line.107">prevCell</a></pre>
 </li>
 </ul>
 <a name="preadMaxBytes">
@@ -926,7 +926,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>preadMaxBytes</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.110">preadMaxBytes</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.109">preadMaxBytes</a></pre>
 </li>
 </ul>
 <a name="bytesRead">
@@ -935,7 +935,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>bytesRead</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.111">bytesRead</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.110">bytesRead</a></pre>
 </li>
 </ul>
 <a name="LAZY_SEEK_ENABLED_BY_DEFAULT">
@@ -944,7 +944,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>LAZY_SEEK_ENABLED_BY_DEFAULT</h4>
-<pre>static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.114">LAZY_SEEK_ENABLED_BY_DEFAULT</a></pre>
+<pre>static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.113">LAZY_SEEK_ENABLED_BY_DEFAULT</a></pre>
 <div class="block">We don't ever expect to change this, the constant is just for clarity.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -958,7 +958,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>STORESCANNER_PARALLEL_SEEK_ENABLE</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.115">STORESCANNER_PARALLEL_SEEK_ENABLE</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.114">STORESCANNER_PARALLEL_SEEK_ENABLE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE">Constant Field Values</a></dd>
@@ -971,7 +971,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>lazySeekEnabledGlobally</h4>
-<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.119">lazySeekEnabledGlobally</a></pre>
+<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.118">lazySeekEnabledGlobally</a></pre>
 <div class="block">Used during unit testing to ensure that lazy seek does save seek ops</div>
 </li>
 </ul>
@@ -981,7 +981,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.126">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.125">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></pre>
 <div class="block">The number of cells scanned in between timeout checks. Specifying a larger value means that
  timeout checks will occur less frequently. Specifying a small value will lead to more frequent
  timeout checks.</div>
@@ -997,7 +997,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.132">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.131">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a></pre>
 <div class="block">Default value of <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK"><code>HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</code></a>.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1011,7 +1011,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>STORESCANNER_PREAD_MAX_BYTES</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.139">STORESCANNER_PREAD_MAX_BYTES</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.138">STORESCANNER_PREAD_MAX_BYTES</a></pre>
 <div class="block">If the read type if Scan.ReadType.DEFAULT, we will start with pread, and if the kvs we scanned
  reaches this limit, we will reopen the scanner with stream. The default value is 4 times of
  block size for this store.</div>
@@ -1027,7 +1027,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>readType</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.141">readType</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client">Scan.ReadType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.140">readType</a></pre>
 </li>
 </ul>
 <a name="scanUsePread">
@@ -1036,7 +1036,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>scanUsePread</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.145">scanUsePread</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.144">scanUsePread</a></pre>
 </li>
 </ul>
 <a name="flushed">
@@ -1045,7 +1045,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>flushed</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.147">flushed</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.146">flushed</a></pre>
 </li>
 </ul>
 <a name="flushedStoreFiles">
@@ -1054,7 +1054,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>flushedStoreFiles</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.149">flushedStoreFiles</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.148">flushedStoreFiles</a></pre>
 </li>
 </ul>
 <a name="memStoreScannersAfterFlush">
@@ -1063,7 +1063,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreScannersAfterFlush</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.151">memStoreScannersAfterFlush</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.150">memStoreScannersAfterFlush</a></pre>
 </li>
 </ul>
 <a name="currentScanners">
@@ -1072,7 +1072,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>currentScanners</h4>
-<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.154">currentScanners</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.153">currentScanners</a></pre>
 </li>
 </ul>
 <a name="flushLock">
@@ -1081,7 +1081,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>flushLock</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/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/regionserver/StoreScanner.html#line.156">flushLock</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/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/regionserver/StoreScanner.html#line.155">flushLock</a></pre>
 </li>
 </ul>
 <a name="readPt">
@@ -1090,7 +1090,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>readPt</h4>
-<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.158">readPt</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.157">readPt</a></pre>
 </li>
 </ul>
 <a name="topChanged">
@@ -1099,7 +1099,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>topChanged</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.159">topChanged</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.158">topChanged</a></pre>
 </li>
 </ul>
 </li>
@@ -1116,7 +1116,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.169">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.168">StoreScanner</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/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
                        <a href="http://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1132,7 +1132,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.232">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.231">StoreScanner</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/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
                     <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/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1156,7 +1156,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.281">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.280">StoreScanner</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/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
                     <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/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
@@ -1185,7 +1185,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.298">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.297">StoreScanner</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/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
                     <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/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
@@ -1216,7 +1216,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.305">StoreScanner</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="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.304">StoreScanner</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/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
                      <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/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
@@ -1238,7 +1238,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.335">StoreScanner</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/StoreScanner.html#line.334">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
              <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
              <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanType</a>&nbsp;scanType,
              <a href="http://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1256,7 +1256,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.345">StoreScanner</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/StoreScanner.html#line.344">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
              <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
              <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanType</a>&nbsp;scanType,
              <a href="http://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1275,7 +1275,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreScanner</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.354">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.353">StoreScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo,
                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver">ScanType</a>&nbsp;scanType,
                     <a href="http://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;columns,
@@ -1303,7 +1303,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>addCurrentScanners</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.219">addCurrentScanners</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.218">addCurrentScanners</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners)</pre>
 </li>
 </ul>
 <a name="getScannersNoCompaction--">
@@ -1312,7 +1312,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannersNoCompaction</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.386">getScannersNoCompaction</a>()
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.385">getScannersNoCompaction</a>()
                                                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a filtered list of scanners. Assumes we are not in a compaction.</div>
 <dl>
@@ -1329,7 +1329,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>isScanUsePread</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.393">isScanUsePread</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.392">isScanUsePread</a>()</pre>
 </li>
 </ul>
 <a name="seekScanners-java.util.List-org.apache.hadoop.hbase.Cell-boolean-boolean-">
@@ -1338,7 +1338,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekScanners</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.404">seekScanners</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <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/StoreScanner.html#line.403">seekScanners</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                             <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;seekKey,
                             boolean&nbsp;isLazy,
                             boolean&nbsp;isParallelSeek)
@@ -1361,7 +1361,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>resetKVHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.435">resetKVHeap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <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/StoreScanner.html#line.434">resetKVHeap</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                            <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)
                     throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1376,7 +1376,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>selectScannersFrom</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.448">selectScannersFrom</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;allScanners)</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.447">selectScannersFrom</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;allScanners)</pre>
 <div class="block">Filters the given list of scanners using Bloom filter, time range, and
  TTL.
  <p>
@@ -1389,7 +1389,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>peek</h4>
-<pre>public&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/StoreScanner.html#line.484">peek</a>()</pre>
+<pre>public&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/StoreScanner.html#line.483">peek</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#peek--">KeyValueScanner</a></code></span></div>
 <div class="block">Look at the next Cell in this scanner, but do not iterate scanner.
  NOTICE: The returned cell has not been passed into ScanQueryMatcher. So it may not be what the
@@ -1408,7 +1408,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.489">next</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.488">next</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#next--">KeyValueScanner</a></code></span></div>
 <div class="block">Return the next Cell in this scanner, iterating the scanner</div>
 <dl>
@@ -1425,7 +1425,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.495">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.494">close</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#close--">KeyValueScanner</a></code></span></div>
 <div class="block">Close the KeyValue scanner.</div>
 <dl>
@@ -1446,7 +1446,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.499">close</a>(boolean&nbsp;withDelayedScannersClose)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.498">close</a>(boolean&nbsp;withDelayedScannersClose)</pre>
 </li>
 </ul>
 <a name="seek-org.apache.hadoop.hbase.Cell-">
@@ -1455,7 +1455,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.528">seek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.527">seek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;key)
              throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#seek-org.apache.hadoop.hbase.Cell-">KeyValueScanner</a></code></span></div>
 <div class="block">Seek the scanner at or after the specified KeyValue.</div>
@@ -1477,7 +1477,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.536">next</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.535">next</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult)
              throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-">InternalScanner</a></code></span></div>
 <div class="block">Grab the next row's worth of values.</div>
@@ -1499,7 +1499,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.547">next</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.546">next</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult,
                     <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/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get the next row of values from this Store.</div>
@@ -1522,7 +1522,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>needToReturn</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.751">needToReturn</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.750">needToReturn</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResult)</pre>
 <div class="block">If the top cell won't be flushed into disk, the new top cell may be
  changed after #reopenAfterFlush. Because the older top cell only exist
  in the memstore scanner but the memstore scanner is replaced by hfile
@@ -1544,7 +1544,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekOrSkipToNextRow</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.758">seekOrSkipToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.757">seekOrSkipToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1558,7 +1558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekOrSkipToNextColumn</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.769">seekOrSkipToNextColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.768">seekOrSkipToNextColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                              throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1572,7 +1572,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>trySkipToNextRow</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.825">trySkipToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.824">trySkipToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                             throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">See if we should actually SEEK or rather just SKIP to the next Cell (see HBASE-13109).
  ScanQueryMatcher may issue SEEK hints, such as seek to next column, next row,
@@ -1635,7 +1635,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>trySkipToNextColumn</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.846">trySkipToNextColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.845">trySkipToNextColumn</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">See <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#trySkipToNextRow-org.apache.hadoop.hbase.Cell-"><code>trySkipToNextRow(Cell)</code></a></div>
 <dl>
@@ -1654,7 +1654,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadPoint</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.862">getReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.861">getReadPoint</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#getReadPoint--">getReadPoint</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a></code></dd>
@@ -1669,7 +1669,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>clearAndClose</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.866">clearAndClose</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners)</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.865">clearAndClose</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners)</pre>
 </li>
 </ul>
 <a name="updateReaders-java.util.List-java.util.List-">
@@ -1678,7 +1678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>updateReaders</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.875">updateReaders</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.874">updateReaders</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
                           <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;memStoreScanners)
                    throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html#updateReaders-java.util.List-java.util.List-">ChangedReadersObserver</a></code></span></div>
@@ -1700,7 +1700,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>reopenAfterFlush</h4>
-<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.897">reopenAfterFlush</a>()
+<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.896">reopenAfterFlush</a>()
                                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1716,7 +1716,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>resetQueryMatcher</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.943">resetQueryMatcher</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;lastTopKey)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.942">resetQueryMatcher</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;lastTopKey)</pre>
 </li>
 </ul>
 <a name="checkScanOrder-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.CellComparator-">
@@ -1725,7 +1725,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>checkScanOrder</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.965">checkScanOrder</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;prevKV,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.964">checkScanOrder</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;prevKV,
                               <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv,
                               <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)
                        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1746,7 +1746,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekToNextRow</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.973">seekToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;c)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.972">seekToNextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;c)
                          throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1760,7 +1760,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>seekAsDirection</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.983">seekAsDirection</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.982">seekAsDirection</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
                            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do a reseek in a normal StoreScanner(scan forward)</div>
 <dl>
@@ -1779,7 +1779,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>reseek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.989">reseek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.988">reseek</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#reseek-org.apache.hadoop.hbase.Cell-">KeyValueScanner</a></code></span></div>
 <div class="block">Reseek the scanner at or after the specified KeyValue.
@@ -1804,7 +1804,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>trySwitchToStreamRead</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1000">trySwitchToStreamRead</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.999">trySwitchToStreamRead</a>()</pre>
 </li>
 </ul>
 <a name="checkFlushed--">
@@ -1813,7 +1813,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFlushed</h4>
-<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1051">checkFlushed</a>()</pre>
+<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1050">checkFlushed</a>()</pre>
 </li>
 </ul>
 <a name="getScannerOrder--">
@@ -1822,7 +1822,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannerOrder</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1074">getScannerOrder</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1073">getScannerOrder</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getScannerOrder--">KeyValueScanner</a></code></span></div>
 <div class="block">Get the order of this KeyValueScanner. This is only relevant for StoreFileScanners and
  MemStoreScanners (other scanners simply return 0). This is required for comparing multiple
@@ -1843,7 +1843,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>parallelSeek</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1084">parallelSeek</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1083">parallelSeek</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                           <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kv)
                    throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Seek storefiles in parallel to optimize IO latency as much as possible</div>
@@ -1862,7 +1862,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllScannersForTesting</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1120">getAllScannersForTesting</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1119">getAllScannersForTesting</a>()</pre>
 <div class="block">Used in testing.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1876,7 +1876,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>enableLazySeekGlobally</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1130">enableLazySeekGlobally</a>(boolean&nbsp;enable)</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1129">enableLazySeekGlobally</a>(boolean&nbsp;enable)</pre>
 </li>
 </ul>
 <a name="getEstimatedNumberOfKvsScanned--">
@@ -1885,7 +1885,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getEstimatedNumberOfKvsScanned</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1137">getEstimatedNumberOfKvsScanned</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1136">getEstimatedNumberOfKvsScanned</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>The estimated number of KVs seen by this scanner (includes some skipped KVs).</dd>
@@ -1898,7 +1898,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextIndexedKey</h4>
-<pre>public&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/StoreScanner.html#line.1142">getNextIndexedKey</a>()</pre>
+<pre>public&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/StoreScanner.html#line.1141">getNextIndexedKey</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html#getNextIndexedKey--">getNextIndexedKey</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></code></dd>
@@ -1917,7 +1917,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValue
 <ul class="blockListLast">
 <li class="blockList">
 <h4>shipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1147">shipped</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.1146">shipped</a>()
              throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html#shipped--">Shipper</a></code></span></div>
 <div class="block">Called after a batch of rows scanned and set to be returned to client. Any in between cleanup

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 42fe00d..f78c04f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -692,20 +692,20 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactor.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">StoreScanner.StoreScannerCompactionRace</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">RegionOpeningState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">StoreScanner.StoreScannerCompactionRace</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactor.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
 </ul>
 </li>
 </ul>


[10/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
index ac1ff82..bc8bc72 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html
@@ -56,1127 +56,1126 @@
 <span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.querymatcher.LegacyScanQueryMatcher;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher;<a name="line.49"></a>
 <span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.querymatcher.UserScanQueryMatcher;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.CollectionUtils;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>/**<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream into List&amp;lt;KeyValue&amp;gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * for a single row.<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * &lt;p&gt;<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * The implementation is not thread safe. So there will be no race between next and close. The only<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * exception is updateReaders, it will be called in the memstore flush thread to indicate that there<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * is a flush.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> */<a name="line.63"></a>
-<span class="sourceLineNo">064</span>@InterfaceAudience.Private<a name="line.64"></a>
-<span class="sourceLineNo">065</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // In unit tests, the store could be null<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  protected final Store store;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private ScanQueryMatcher matcher;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  protected KeyValueHeap heap;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private boolean cacheBlocks;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private long countPerRow = 0;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private int storeLimit = -1;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private int storeOffset = 0;<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  // Do not need to be volatile because it's always accessed via synchronized methods<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private boolean closing = false;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final boolean get;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final boolean explicitColumnQuery;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final boolean useRowColBloom;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private boolean parallelSeekEnabled = false;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private ExecutorService executor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final Scan scan;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private final long oldestUnexpiredTS;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final long now;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private final int minVersions;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private final long maxRowSize;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private final long cellsPerHeartbeatCheck;<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  // 1) Collects all the KVHeap that are eagerly getting closed during the<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  //    course of a scan<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // 2) Collects the unused memstore scanners. If we close the memstore scanners<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  //    before sending data to client, the chunk may be reclaimed by other<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  //    updates and the data will be corrupt.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final List&lt;KeyValueScanner&gt; scannersForDelayedClose = new ArrayList&lt;&gt;();<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>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   */<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private long kvsScanned = 0;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  private Cell prevCell = null;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private final long preadMaxBytes;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private long bytesRead;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private static boolean lazySeekEnabledGlobally = LAZY_SEEK_ENABLED_BY_DEFAULT;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * timeout checks.<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  /**<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * If the read type if Scan.ReadType.DEFAULT, we will start with pread, and if the kvs we scanned<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * reaches this limit, we will reopen the scanner with stream. The default value is 4 times of<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * block size for this store.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public static final String STORESCANNER_PREAD_MAX_BYTES = "hbase.storescanner.pread.max.bytes";<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final Scan.ReadType readType;<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // A flag whether use pread for scan<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  // it maybe changed if we use Scan.ReadType.DEFAULT and we have read lots of data.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private boolean scanUsePread;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  // Indicates whether there was flush during the course of the scan<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  private volatile boolean flushed = false;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  // generally we get one file from a flush<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private final List&lt;StoreFile&gt; flushedStoreFiles = new ArrayList&lt;&gt;(1);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  // Since CompactingMemstore is now default, we get three memstore scanners from a flush<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private final List&lt;KeyValueScanner&gt; memStoreScannersAfterFlush = new ArrayList&lt;&gt;(3);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  // The current list of scanners<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @VisibleForTesting<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  final List&lt;KeyValueScanner&gt; currentScanners = new ArrayList&lt;&gt;();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  // flush update lock<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private final ReentrantLock flushLock = new ReentrantLock();<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected final long readPt;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private boolean topChanged = false;<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  enum StoreScannerCompactionRace {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    BEFORE_SEEK,<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    AFTER_SEEK,<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    COMPACT_COMPLETE<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>  /** An internal constructor. */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  protected StoreScanner(Store store, Scan scan, final ScanInfo scanInfo,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      final NavigableSet&lt;byte[]&gt; columns, long readPt, boolean cacheBlocks, ScanType scanType) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.readPt = readPt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    this.store = store;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    this.cacheBlocks = cacheBlocks;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    get = scan.isGetScan();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    int numCol = columns == null ? 0 : columns.size();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    explicitColumnQuery = numCol &gt; 0;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.scan = scan;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    this.now = EnvironmentEdgeManager.currentTime();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.oldestUnexpiredTS = scan.isRaw() ? 0L : now - scanInfo.getTtl();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    this.minVersions = scanInfo.getMinVersions();<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>     // We look up row-column Bloom filters for multi-column queries as part of<a name="line.182"></a>
-<span class="sourceLineNo">183</span>     // the seek operation. However, we also look the row-column Bloom filter<a name="line.183"></a>
-<span class="sourceLineNo">184</span>     // for multi-row (non-"get") scans because this is not done in<a name="line.184"></a>
-<span class="sourceLineNo">185</span>     // StoreFile.passesBloomFilter(Scan, SortedSet&lt;byte[]&gt;).<a name="line.185"></a>
-<span class="sourceLineNo">186</span>     this.useRowColBloom = numCol &gt; 1 || (!get &amp;&amp; numCol == 1);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>     this.maxRowSize = scanInfo.getTableMaxRowSize();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    if (get) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      this.readType = Scan.ReadType.PREAD;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.scanUsePread = true;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    } else if(scanType != scanType.USER_SCAN) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      // For compaction scanners never use Pread as already we have stream based scanners on the<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      // store files to be compacted<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      this.readType = Scan.ReadType.STREAM;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      this.scanUsePread = false;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } else {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      if (scan.getReadType() == Scan.ReadType.DEFAULT) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        this.readType = scanInfo.isUsePread() ? Scan.ReadType.PREAD : Scan.ReadType.DEFAULT;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } else {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        this.readType = scan.getReadType();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // Always start with pread unless user specific stream. Will change to stream later if<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // readType is default if the scan keeps running for a long time.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      this.scanUsePread = this.readType != Scan.ReadType.STREAM;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    this.preadMaxBytes = scanInfo.getPreadMaxBytes();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    this.cellsPerHeartbeatCheck = scanInfo.getCellsPerTimeoutCheck();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // Parallel seeking is on if the config allows and more there is more than one store file.<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (this.store != null &amp;&amp; this.store.getStorefilesCount() &gt; 1) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      RegionServerServices rsService = ((HStore) store).getHRegion().getRegionServerServices();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      if (rsService != null &amp;&amp; scanInfo.isParallelSeekEnabled()) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        this.parallelSeekEnabled = true;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        this.executor = rsService.getExecutorService();<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>  private void addCurrentScanners(List&lt;? extends KeyValueScanner&gt; scanners) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    this.currentScanners.addAll(scanners);<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>  /**<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * Opens a scanner across memstore, snapshot, and all StoreFiles. Assumes we<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * are not in a compaction.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param store who we scan<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @param scan the spec<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @param columns which columns we are scanning<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @throws IOException<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, final NavigableSet&lt;byte[]&gt; columns,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      long readPt)<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  throws IOException {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    this(store, scan, scanInfo, columns, readPt, scan.getCacheBlocks(), ScanType.USER_SCAN);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    if (columns != null &amp;&amp; scan.isRaw()) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      throw new DoNotRetryIOException("Cannot specify any column for a raw scan");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    matcher = UserScanQueryMatcher.create(scan, scanInfo, columns, oldestUnexpiredTS, now,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      store.getCoprocessorHost());<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    this.store.addChangedReaderObserver(this);<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    try {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Pass columns to try to filter out unnecessary StoreFiles.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      List&lt;KeyValueScanner&gt; scanners = getScannersNoCompaction();<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>      // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      // key does not exist, then to the start of the next matching Row).<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // Always check bloom filter to optimize the top row seek for delete<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      // family marker.<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      seekScanners(scanners, matcher.getStartKey(), explicitColumnQuery &amp;&amp; lazySeekEnabledGlobally,<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        parallelSeekEnabled);<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>      // set storeLimit<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.storeLimit = scan.getMaxResultsPerColumnFamily();<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>      // set rowOffset<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      this.storeOffset = scan.getRowOffsetPerColumnFamily();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      addCurrentScanners(scanners);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      // Combine all seeked scanners with a heap<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      resetKVHeap(scanners, store.getComparator());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    } catch (IOException e) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // remove us from the HStore#changedReaderObservers here or we'll have no chance to<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // and might cause memory leak<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.store.deleteChangedReaderObserver(this);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      throw e;<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * Used for compactions.&lt;p&gt;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   *<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Opens a scanner across specified StoreFiles.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @param store who we scan<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param scan the spec<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param scanners ancillary scanners<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   * @param smallestReadPoint the readPoint that we should use for tracking<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   *          versions<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType,<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      long smallestReadPoint, long earliestPutTs) throws IOException {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    this(store, scanInfo, scan, scanners, scanType, smallestReadPoint, earliestPutTs, null, null);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>  /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * Used for compactions that drop deletes from a limited range of rows.&lt;p&gt;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   *<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * Opens a scanner across specified StoreFiles.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * @param store who we scan<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * @param scan the spec<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * @param scanners ancillary scanners<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @param smallestReadPoint the readPoint that we should use for tracking versions<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * @param dropDeletesFromRow The inclusive left bound of the range; can be EMPTY_START_ROW.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @param dropDeletesToRow The exclusive right bound of the range; can be EMPTY_END_ROW.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  public StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      List&lt;? extends KeyValueScanner&gt; scanners, long smallestReadPoint, long earliestPutTs,<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    this(store, scanInfo, scan, scanners, ScanType.COMPACT_RETAIN_DELETES, smallestReadPoint,<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        earliestPutTs, dropDeletesFromRow, dropDeletesToRow);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  private StoreScanner(Store store, ScanInfo scanInfo, Scan scan,<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      List&lt;? extends KeyValueScanner&gt; scanners, ScanType scanType, long smallestReadPoint,<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    this(store, scan, scanInfo, null,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        ((HStore) store).getHRegion().getReadPoint(IsolationLevel.READ_COMMITTED), false, scanType);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    if (scan.hasFilter() || (scan.getStartRow() != null &amp;&amp; scan.getStartRow().length &gt; 0)<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        || (scan.getStopRow() != null &amp;&amp; scan.getStopRow().length &gt; 0)<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        || !scan.getTimeRange().isAllTime()) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      // use legacy query matcher since we do not consider the scan object in our code. Only used to<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // keep compatibility for coprocessor.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      matcher = LegacyScanQueryMatcher.create(scan, scanInfo, null, scanType, smallestReadPoint,<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        earliestPutTs, oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow,<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        store.getCoprocessorHost());<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    } else {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      matcher = CompactionScanQueryMatcher.create(scanInfo, scanType, smallestReadPoint,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        earliestPutTs, oldestUnexpiredTS, now, dropDeletesFromRow, dropDeletesToRow,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        store.getCoprocessorHost());<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>    // Filter the list of scanners using Bloom filters, time range, TTL, etc.<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    scanners = selectScannersFrom(scanners);<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // Seek all scanners to the initial key<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    addCurrentScanners(scanners);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    // Combine all seeked scanners with a heap<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    resetKVHeap(scanners, store.getComparator());<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>  @VisibleForTesting<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      final List&lt;? extends KeyValueScanner&gt; scanners) throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    this(scan, scanInfo, scanType, columns, scanners,<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        HConstants.LATEST_TIMESTAMP,<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        // 0 is passed as readpoint because the test bypasses Store<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        0);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @VisibleForTesting<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  StoreScanner(final Scan scan, ScanInfo scanInfo,<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    ScanType scanType, final NavigableSet&lt;byte[]&gt; columns,<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    final List&lt;? extends KeyValueScanner&gt; scanners, long earliestPutTs)<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    this(scan, scanInfo, scanType, columns, scanners, earliestPutTs,<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // 0 is passed as readpoint because the test bypasses Store<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      0);<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>  public StoreScanner(final Scan scan, ScanInfo scanInfo, ScanType scanType,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      final NavigableSet&lt;byte[]&gt; columns, final List&lt;? extends KeyValueScanner&gt; scanners, long earliestPutTs,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      long readPt) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    this(null, scan, scanInfo, columns, readPt,<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        scanType == ScanType.USER_SCAN ? scan.getCacheBlocks() : false, scanType);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    if (scanType == ScanType.USER_SCAN) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      this.matcher = UserScanQueryMatcher.create(scan, scanInfo, columns, oldestUnexpiredTS, now,<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        null);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    } else {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      if (scan.hasFilter() || (scan.getStartRow() != null &amp;&amp; scan.getStartRow().length &gt; 0)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          || (scan.getStopRow() != null &amp;&amp; scan.getStopRow().length &gt; 0)<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          || !scan.getTimeRange().isAllTime() || columns != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>        // use legacy query matcher since we do not consider the scan object in our code. Only used<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        // to keep compatibility for coprocessor.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>        matcher = LegacyScanQueryMatcher.create(scan, scanInfo, columns, scanType, Long.MAX_VALUE,<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          earliestPutTs, oldestUnexpiredTS, now, null, null, store.getCoprocessorHost());<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      } else {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        this.matcher = CompactionScanQueryMatcher.create(scanInfo, scanType, Long.MAX_VALUE,<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          earliestPutTs, oldestUnexpiredTS, now, null, null, null);<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><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Seek all scanners to the initial key<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    seekScanners(scanners, matcher.getStartKey(), false, parallelSeekEnabled);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    addCurrentScanners(scanners);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    resetKVHeap(scanners, scanInfo.getComparator());<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>  /**<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * Get a filtered list of scanners. Assumes we are not in a compaction.<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @return list of scanners to seek<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private List&lt;KeyValueScanner&gt; getScannersNoCompaction() throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    return selectScannersFrom(<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      store.getScanners(cacheBlocks, scanUsePread, false, matcher, scan.getStartRow(),<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        scan.includeStartRow(), scan.getStopRow(), scan.includeStopRow(), this.readPt));<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  @VisibleForTesting<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  boolean isScanUsePread() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return this.scanUsePread;<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>   * Seek the specified scanners with the given key<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @param scanners<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param seekKey<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param isLazy true if using lazy seek<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @param isParallelSeek true if using parallel seek<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @throws IOException<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  protected void seekScanners(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      Cell seekKey, boolean isLazy, boolean isParallelSeek)<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      throws IOException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    // Seek all scanners to the start of the Row (or if the exact matching row<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // key does not exist, then to the start of the next matching Row).<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    // Always check bloom filter to optimize the top row seek for delete<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    // family marker.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    if (isLazy) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      for (KeyValueScanner scanner : scanners) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        scanner.requestSeek(seekKey, false, true);<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      if (!isParallelSeek) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        long totalScannersSoughtBytes = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        for (KeyValueScanner scanner : scanners) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          if (matcher.isUserScan() &amp;&amp; totalScannersSoughtBytes &gt;= maxRowSize) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>            throw new RowTooBigException("Max row size allowed: " + maxRowSize<a name="line.420"></a>
-<span class="sourceLineNo">421</span>              + ", but row is bigger than that");<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          scanner.seek(seekKey);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          Cell c = scanner.peek();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (c != null) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            totalScannersSoughtBytes += CellUtil.estimatedSerializedSizeOf(c);<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>      } else {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        parallelSeek(scanners, seekKey);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      }<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>  protected void resetKVHeap(List&lt;? extends KeyValueScanner&gt; scanners,<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      CellComparator comparator) throws IOException {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // Combine all seeked scanners with a heap<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    heap = new KeyValueHeap(scanners, comparator);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Filters the given list of scanners using Bloom filter, time range, and<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * TTL.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * &lt;p&gt;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * Will be overridden by testcase so declared as protected.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  @VisibleForTesting<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  protected List&lt;KeyValueScanner&gt; selectScannersFrom(<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final List&lt;? extends KeyValueScanner&gt; allScanners) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    boolean memOnly;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    boolean filesOnly;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    if (scan instanceof InternalScan) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      InternalScan iscan = (InternalScan)scan;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      memOnly = iscan.isCheckOnlyMemStore();<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      filesOnly = iscan.isCheckOnlyStoreFiles();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    } else {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      memOnly = false;<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      filesOnly = false;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    List&lt;KeyValueScanner&gt; scanners = new ArrayList&lt;&gt;(allScanners.size());<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // We can only exclude store files based on TTL if minVersions is set to 0.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    // Otherwise, we might have to return KVs that have technically expired.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    long expiredTimestampCutoff = minVersions == 0 ? oldestUnexpiredTS: Long.MIN_VALUE;<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // include only those scan files which pass all filters<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    for (KeyValueScanner kvs : allScanners) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      boolean isFile = kvs.isFileScanner();<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      if ((!isFile &amp;&amp; filesOnly) || (isFile &amp;&amp; memOnly)) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        continue;<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>      if (kvs.shouldUseScanner(scan, store, expiredTimestampCutoff)) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        scanners.add(kvs);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      } else {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        kvs.close();<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    return scanners;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>  @Override<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  public Cell peek() {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    return heap != null ? heap.peek() : null;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>  @Override<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  public KeyValue next() {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // throw runtime exception perhaps?<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    throw new RuntimeException("Never call StoreScanner.next()");<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>  @Override<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  public void close() {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    close(true);<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>  private void close(boolean withDelayedScannersClose) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (this.closing) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      return;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    if (withDelayedScannersClose) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.closing = true;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Under test, we dont have a this.store<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.store != null) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      this.store.deleteChangedReaderObserver(this);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (withDelayedScannersClose) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      clearAndClose(scannersForDelayedClose);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      clearAndClose(memStoreScannersAfterFlush);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (this.heap != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        this.heap.close();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        this.currentScanners.clear();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        this.heap = null; // CLOSED!<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    } else {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (this.heap != null) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        this.scannersForDelayedClose.add(this.heap);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        this.currentScanners.clear();<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        this.heap = null;<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>  }<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>  @Override<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  public boolean seek(Cell key) throws IOException {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    if (checkFlushed()) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      reopenAfterFlush();<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    return this.heap.seek(key);<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>  @Override<a name="line.535"></a>
-<span class="sourceLineNo">536</span>  public boolean next(List&lt;Cell&gt; outResult) throws IOException {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return next(outResult, NoLimitScannerContext.getInstance());<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  /**<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   * Get the next row of values from this Store.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>   * @param outResult<a name="line.542"></a>
-<span class="sourceLineNo">543</span>   * @param scannerContext<a name="line.543"></a>
-<span class="sourceLineNo">544</span>   * @return true if there are more rows, false if scanner is done<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   */<a name="line.545"></a>
-<span class="sourceLineNo">546</span>  @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  public boolean next(List&lt;Cell&gt; outResult, ScannerContext scannerContext) throws IOException {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    if (scannerContext == null) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      throw new IllegalArgumentException("Scanner context cannot be null");<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    if (checkFlushed() &amp;&amp; reopenAfterFlush()) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>    // if the heap was left null, then the scanners had previously run out anyways, close and<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    // return.<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    if (this.heap == null) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      // By this time partial close should happened because already heap is null<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      close(false);// Do all cleanup except heap.close()<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>    Cell cell = this.heap.peek();<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (cell == null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      close(false);// Do all cleanup except heap.close()<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>    // only call setRow if the row changes; avoids confusing the query matcher<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    // if scanning intra-row<a name="line.570"></a>
-<span class="sourceLineNo">571</span><a name="line.571"></a>
-<span class="sourceLineNo">572</span>    // If no limits exists in the scope LimitScope.Between_Cells then we are sure we are changing<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    // rows. Else it is possible we are still traversing the same row so we must perform the row<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // comparison.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    if (!scannerContext.hasAnyLimit(LimitScope.BETWEEN_CELLS) || matcher.currentRow() == null) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      this.countPerRow = 0;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      matcher.setToNewRow(cell);<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>    // Clear progress away unless invoker has indicated it should be kept.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    if (!scannerContext.getKeepProgress()) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      scannerContext.clearProgress();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    // Only do a sanity-check if store and comparator are available.<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    CellComparator comparator = store != null ? store.getComparator() : null;<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
-<span class="sourceLineNo">588</span>    int count = 0;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    long totalBytesRead = 0;<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>    LOOP: do {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      // Update and check the time limit based on the configured value of cellsPerTimeoutCheck<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      if ((kvsScanned % cellsPerHeartbeatCheck == 0)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        scannerContext.updateTimeProgress();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        if (scannerContext.checkTimeLimit(LimitScope.BETWEEN_CELLS)) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          scannerContext.setPeekedCellInHeartbeat(prevCell);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          return scannerContext.setScannerState(NextState.TIME_LIMIT_REACHED).hasMoreValues();<a name="line.597"></a>
-<span class="sourceLineNo">598</span>        }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      }<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // Do object compare - we set prevKV from the same heap.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      if (prevCell != cell) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        ++kvsScanned;<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      checkScanOrder(prevCell, cell, comparator);<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      int cellSize = CellUtil.estimatedSerializedSizeOf(cell);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      bytesRead += cellSize;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      prevCell = cell;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      topChanged = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      ScanQueryMatcher.MatchCode qcode = matcher.match(cell);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      switch (qcode) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        case INCLUDE:<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        case INCLUDE_AND_SEEK_NEXT_ROW:<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        case INCLUDE_AND_SEEK_NEXT_COL:<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>          Filter f = matcher.getFilter();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          if (f != null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>            cell = f.transformCell(cell);<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>          this.countPerRow++;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          if (storeLimit &gt; -1 &amp;&amp; this.countPerRow &gt; (storeLimit + storeOffset)) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            // do what SEEK_NEXT_ROW does.<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            if (!matcher.moreRowsMayExistAfter(cell)) {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>              close(false);// Do all cleanup except heap.close()<a name="line.624"></a>
-<span class="sourceLineNo">625</span>              return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>            }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>            matcher.clearCurrentRow();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>            seekToNextRow(cell);<a name="line.628"></a>
-<span class="sourceLineNo">629</span>            break LOOP;<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>          // add to results only if we have skipped #storeOffset kvs<a name="line.632"></a>
-<span class="sourceLineNo">633</span>          // also update metric accordingly<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          if (this.countPerRow &gt; storeOffset) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>            outResult.add(cell);<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>            // Update local tracking information<a name="line.637"></a>
-<span class="sourceLineNo">638</span>            count++;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>            totalBytesRead += cellSize;<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // Update the progress of the scanner context<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            scannerContext.incrementSizeProgress(cellSize, CellUtil.estimatedHeapSizeOf(cell));<a name="line.642"></a>
-<span class="sourceLineNo">643</span>            scannerContext.incrementBatchProgress(1);<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>            if (matcher.isUserScan() &amp;&amp; totalBytesRead &gt; maxRowSize) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              throw new RowTooBigException(<a name="line.646"></a>
-<span class="sourceLineNo">647</span>                  "Max row size allowed: " + maxRowSize + ", but the row is bigger than that.");<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>          if (qcode == ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_ROW) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>            if (!matcher.moreRowsMayExistAfter(cell)) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>              close(false);// Do all cleanup except heap.close()<a name="line.653"></a>
-<span class="sourceLineNo">654</span>              return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>            }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>            matcher.clearCurrentRow();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>            seekOrSkipToNextRow(cell);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          } else if (qcode == ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_COL) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>            seekOrSkipToNextColumn(cell);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          } else {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            this.heap.next();<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>          if (scannerContext.checkBatchLimit(LimitScope.BETWEEN_CELLS)) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            break LOOP;<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          if (scannerContext.checkSizeLimit(LimitScope.BETWEEN_CELLS)) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>            break LOOP;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>          continue;<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>        case DONE:<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          // Optimization for Gets! If DONE, no more to get on this row, early exit!<a name="line.673"></a>
-<span class="sourceLineNo">674</span>          if (get) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>            // Then no more to this row... exit.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            close(false);// Do all cleanup except heap.close()<a name="line.676"></a>
-<span class="sourceLineNo">677</span>            return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.677"></a>
-<span class="sourceLineNo">678</span>          }<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          matcher.clearCurrentRow();<a name="line.679"></a>
-<span class="sourceLineNo">680</span>          return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>        case DONE_SCAN:<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          close(false);// Do all cleanup except heap.close()<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>        case SEEK_NEXT_ROW:<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          // This is just a relatively simple end of scan fix, to short-cut end<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          // us if there is an endKey in the scan.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>          if (!matcher.moreRowsMayExistAfter(cell)) {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            close(false);// Do all cleanup except heap.close()<a name="line.690"></a>
-<span class="sourceLineNo">691</span>            return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>          }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>          matcher.clearCurrentRow();<a name="line.693"></a>
-<span class="sourceLineNo">694</span>          seekOrSkipToNextRow(cell);<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          NextState stateAfterSeekNextRow = needToReturn(outResult);<a name="line.695"></a>
-<span class="sourceLineNo">696</span>          if (stateAfterSeekNextRow != null) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>            return scannerContext.setScannerState(stateAfterSeekNextRow).hasMoreValues();<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          }<a name="line.698"></a>
-<span class="sourceLineNo">699</span>          break;<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>        case SEEK_NEXT_COL:<a name="line.701"></a>
-<span class="sourceLineNo">702</span>          seekOrSkipToNextColumn(cell);<a name="line.702"></a>
-<span class="sourceLineNo">703</span>          NextState stateAfterSeekNextColumn = needToReturn(outResult);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>          if (stateAfterSeekNextColumn != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>            return scannerContext.setScannerState(stateAfterSeekNextColumn).hasMoreValues();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>          }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          break;<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>        case SKIP:<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          this.heap.next();<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          break;<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></a>
-<span class="sourceLineNo">713</span>        case SEEK_NEXT_USING_HINT:<a name="line.713"></a>
-<span class="sourceLineNo">714</span>          Cell nextKV = matcher.getNextKeyHint(cell);<a name="line.714"></a>
-<span class="sourceLineNo">715</span>          if (nextKV != null) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>            seekAsDirection(nextKV);<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            NextState stateAfterSeekByHint = needToReturn(outResult);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            if (stateAfterSeekByHint != null) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>              return scannerContext.setScannerState(stateAfterSeekByHint).hasMoreValues();<a name="line.719"></a>
-<span class="sourceLineNo">720</span>            }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          } else {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>            heap.next();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          }<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          break;<a name="line.724"></a>
-<span class="sourceLineNo">725</span><a name="line.725"></a>
-<span class="sourceLineNo">726</span>        default:<a name="line.726"></a>
-<span class="sourceLineNo">727</span>          throw new RuntimeException("UNEXPECTED");<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    } while ((cell = this.heap.peek()) != null);<a name="line.729"></a>
-<span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span>    if (count &gt; 0) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      return scannerContext.setScannerState(NextState.MORE_VALUES).hasMoreValues();<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>    // No more keys<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    close(false);// Do all cleanup except heap.close()<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return scannerContext.setScannerState(NextState.NO_MORE_VALUES).hasMoreValues();<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>   * If the top cell won't be flushed into disk, the new top cell may be<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * changed after #reopenAfterFlush. Because the older top cell only exist<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * in the memstore scanner but the memstore scanner is replaced by hfile<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * scanner after #reopenAfterFlush. If the row of top cell is changed,<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * we should return the current cells. Otherwise, we may return<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * the cells across different rows.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @param outResult the cells which are visible for user scan<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   * @return null is the top cell doesn't change. Otherwise, the NextState<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   *         to return<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   */<a name="line.750"></a>
-<span class="sourceLineNo">751</span>  private NextState needToReturn(List&lt;Cell&gt; outResult) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    if (!outResult.isEmpty() &amp;&amp; topChanged) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      return heap.peek() == null ? NextState.NO_MORE_VALUES : NextState.MORE_VALUES;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return null;<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  private void seekOrSkipToNextRow(Cell cell) throws IOException {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    // If it is a Get Scan, then we know that we are done with this row; there are no more<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    // rows beyond the current one: don't try to optimize.<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    if (!get) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      if (trySkipToNextRow(cell)) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>        return;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    seekToNextRow(cell);<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>  private void seekOrSkipToNextColumn(Cell cell) throws IOException {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    if (!trySkipToNextColumn(cell)) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      seekAsDirection(matcher.getKeyForNextColumn(cell));<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>  /**<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * See if we should actually SEEK or rather just SKIP to the next Cell (see HBASE-13109).<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * ScanQueryMatcher may issue SEEK hints, such as seek to next column, next row,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   * or seek to an arbitrary seek key. This method decides whether a seek is the most efficient<a name="line.778"></a>
-<span class="sourceLineNo">779</span>   * _actual_ way to get us to the requested cell (SEEKs are more expensive than SKIP, SKIP,<a name="line.779"></a>
-<span class="sourceLineNo">780</span>   * SKIP inside the current, loaded block).<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * It does this by looking at the next indexed key of the current HFile. This key<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   * is then compared with the _SEEK_ key, where a SEEK key is an artificial 'last possible key<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * on the row' (only in here, we avoid actually creating a SEEK key; in the compare we work with<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * the current Cell but compare as though it were a seek key; see down in<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   * matcher.compareKeyForNextRow, etc). If the compare gets us onto the<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * next block we *_SEEK, otherwise we just SKIP to the next requested cell.<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   *<a name="line.787"></a>
-<span class="sourceLineNo">788</span>   * &lt;p&gt;Other notes:<a name="line.788"></a>
-<span class="sourceLineNo">789</span>   * &lt;ul&gt;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>   * &lt;li&gt;Rows can straddle block boundaries&lt;/li&gt;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>   * &lt;li&gt;Versions of columns can straddle block boundaries (i.e. column C1 at T1 might be in a<a name="line.791"></a>
-<span class="sourceLineNo">792</span>   * different block than column C1 at T2)&lt;/li&gt;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   * &lt;li&gt;We want to SKIP if the chance is high that we'll find the desired Cell after a<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * few SKIPs...&lt;/li&gt;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   * &lt;li&gt;We want to SEEK when the chance is high that we'll be able to seek<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * past many Cells, especially if we know we need to go to the next block.&lt;/li&gt;<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * &lt;/ul&gt;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * &lt;p&gt;A good proxy (best effort) to determine whether SKIP is better than SEEK is whether<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * we'll likely end up seeking to the next block (or past the next block) to get our next column.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   * Example:<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * &lt;pre&gt;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * |    BLOCK 1              |     BLOCK 2                   |<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * |  r1/c1, r1/c2, r1/c3    |    r1/c4, r1/c5, r2/c1        |<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   *                                   ^         ^<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   *                                   |         |<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   *                           Next Index Key   SEEK_NEXT_ROW (before r2/c1)<a name="line.806"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.CollectionUtils;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>/**<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * Scanner scans both the memstore and the Store. Coalesce KeyValue stream into List&amp;lt;KeyValue&amp;gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * for a single row.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;p&gt;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * The implementation is not thread safe. So there will be no race between next and close. The only<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * exception is updateReaders, it will be called in the memstore flush thread to indicate that there<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * is a flush.<a name="line.61"></a>
+<span class="sourceLineNo">062</span> */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>@InterfaceAudience.Private<a name="line.63"></a>
+<span class="sourceLineNo">064</span>public class StoreScanner extends NonReversedNonLazyKeyValueScanner<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    implements KeyValueScanner, InternalScanner, ChangedReadersObserver {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final Log LOG = LogFactory.getLog(StoreScanner.class);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  // In unit tests, the store could be null<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  protected final Store store;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private ScanQueryMatcher matcher;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  protected KeyValueHeap heap;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private boolean cacheBlocks;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private long countPerRow = 0;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private int storeLimit = -1;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private int storeOffset = 0;<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  // Used to indicate that the scanner has closed (see HBASE-1107)<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  // Do not need to be volatile because it's always accessed via synchronized methods<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private boolean closing = false;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final boolean get;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final boolean explicitColumnQuery;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final boolean useRowColBloom;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * A flag that enables StoreFileScanner parallel-seeking<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private boolean parallelSeekEnabled = false;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private ExecutorService executor;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final Scan scan;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private final long oldestUnexpiredTS;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final long now;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private final int minVersions;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final long maxRowSize;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private final long cellsPerHeartbeatCheck;<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  // 1) Collects all the KVHeap that are eagerly getting closed during the<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  //    course of a scan<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  // 2) Collects the unused memstore scanners. If we close the memstore scanners<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  //    before sending data to client, the chunk may be reclaimed by other<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  //    updates and the data will be corrupt.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final List&lt;KeyValueScanner&gt; scannersForDelayedClose = new ArrayList&lt;&gt;();<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>   * The number of KVs seen by the scanner. Includes explicitly skipped KVs, but not<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * KVs skipped via seeking to next row/column. TODO: estimate them?<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private long kvsScanned = 0;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  protected Cell prevCell = null;<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private final long preadMaxBytes;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private long bytesRead;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  /** We don't ever expect to change this, the constant is just for clarity. */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT = true;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public static final String STORESCANNER_PARALLEL_SEEK_ENABLE =<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      "hbase.storescanner.parallel.seek.enable";<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  /** Used during unit testing to ensure that lazy seek does save seek ops */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private static boolean lazySeekEnabledGlobally = LAZY_SEEK_ENABLED_BY_DEFAULT;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  /**<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * The number of cells scanned in between timeout checks. Specifying a larger value means that<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * timeout checks will occur less frequently. Specifying a small value will lead to more frequent<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * timeout checks.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      "hbase.cells.scanned.per.heartbeat.check";<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * Default value of {@link #HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK}.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK = 10000;<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * If the read type if Scan.ReadType.DEFAULT, we will start with pread, and if the kvs we scanned<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * reaches this limit, we will reopen the scanner with stream. The default value is 4 times of<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * block size for this store.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  public static final String STORESCANNER_PREAD_MAX_BYTES = "hbase.storescanner.pread.max.bytes";<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private final Scan.ReadType readType;<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // A flag whether use pread for scan<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // it maybe changed if we use Scan.ReadType.DEFAULT and we have read lots of data.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private boolean scanUsePread;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  // Indicates whether there was flush during the course of the scan<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private volatile boolean flushed = false;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  // generally we get one file from a flush<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private final List&lt;StoreFile&gt; flushedStoreFiles = new ArrayList&lt;&gt;(1);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  // Since CompactingMemstore is now default, we get three memstore scanners from a flush<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  private final List&lt;KeyValueScanner&gt; memStoreScannersAfterFlush = new ArrayList&lt;&gt;(3);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  // The current list of scanners<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  @VisibleForTesting<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  final List&lt;KeyValueScanner&gt; currentScanners = new ArrayList&lt;&gt;();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  // flush update lock<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  private final ReentrantLock flushLock = new ReentrantLock();<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>  protected final long readPt;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  private boolean topChanged = false;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  // used by the injection framework to test race between StoreScanner construction and compaction<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  enum StoreScannerCompactionRace {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    BEFORE_SEEK,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    AFTER_SEEK,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    COMPACT_COMPLET

<TRUNCATED>

[07/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index e8242af..274fb06 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -2678,6 +2678,25 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.client.AbstractTestScanCursor.TIMEOUT">
+<!--   -->
+</a><code>protected&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TIMEOUT">TIMEOUT</a></code></td>
+<td class="colLast"><code>4000</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/HConnectionTestingUtility.SleepAtFirstRpcCall.html" title="class in org.apache.hadoop.hbase.client">HConnectionTestingUtility.SleepAtFirstRpcCall</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -9356,25 +9375,6 @@
 </li>
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.TestScannerCursor.TIMEOUT">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TIMEOUT">TIMEOUT</a></code></td>
-<td class="colLast"><code>4000</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerRetriableFailure</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 2b18c3d..a21838e 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -306,6 +306,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html#AbstractTestProtobufLog--">AbstractTestProtobufLog()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractTestProtobufLog</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractTestScanCursor</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#AbstractTestScanCursor--">AbstractTestScanCursor()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractTestScanCursor.SparseFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/querymatcher/AbstractTestScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">AbstractTestScanQueryMatcher</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/querymatcher/package-summary.html">org.apache.hadoop.hbase.regionserver.querymatcher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/querymatcher/AbstractTestScanQueryMatcher.html#AbstractTestScanQueryMatcher--">AbstractTestScanQueryMatcher()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/AbstractTestScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">AbstractTestScanQueryMatcher</a></dt>
@@ -6846,9 +6852,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapred/TestTableMapReduceUtil.html#createPutCommand-org.apache.hadoop.hbase.client.Table-">createPutCommand(Table)</a></span> - Static method in class org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TestTableMapReduceUtil.html" title="class in org.apache.hadoop.hbase.mapred">TestTableMapReduceUtil</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">createPuts(byte[][], byte[][], byte[][], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">createPuts(byte[][], byte[][], byte[][], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">createPuts(byte[][], byte[][], byte[][], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">createPuts(byte[][], byte[][], byte[][], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#createPuts-byte:A:A-byte:A:A-byte:A:A-byte:A-">createPuts(byte[][], byte[][], byte[][], byte[])</a></span> - Static 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>
@@ -6950,6 +6956,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestCatalogJanitor.html#createResult-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.HRegionInfo-">createResult(HRegionInfo, HRegionInfo, HRegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestCatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">TestCatalogJanitor</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createReversedScanWithSparseFilter--">createReversedScanWithSparseFilter()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-">createRootDir(boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
 <dd>
 <div class="block">Creates an hbase rootdir in user home directory.</div>
@@ -7017,6 +7025,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestFromClientSide.html#createScanWithRowFilter-byte:A-byte:A-org.apache.hadoop.hbase.filter.CompareFilter.CompareOp-">createScanWithRowFilter(byte[], byte[], CompareFilter.CompareOp)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestFromClientSide.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSizeLimit--">createScanWithSizeLimit()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createScanWithSparseFilter--">createScanWithSparseFilter()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.html#createSchema--">createSchema()</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedList.Generator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedListWithVisibility.VisibilityGenerator.html#createSchema--">createSchema()</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="org/apache/hadoop/hbase/test/IntegrationTestBigLinkedListWithVisibility.VisibilityGenerator.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestBigLinkedListWithVisibility.VisibilityGenerator</a></dt>
@@ -7516,7 +7528,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/HttpServerFunctionalTest.html#createTestServerWithSecurity-org.apache.hadoop.conf.Configuration-">createTestServerWithSecurity(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/HttpServerFunctionalTest.html" title="class in org.apache.hadoop.hbase.http">HttpServerFunctionalTest</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#createTestTable-org.apache.hadoop.hbase.TableName-byte:A:A-byte:A:A-byte:A:A-byte:A-">createTestTable(TableName, byte[][], byte[][], byte[][], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#createTestTable-org.apache.hadoop.hbase.TableName-byte:A:A-byte:A:A-byte:A:A-byte:A-">createTestTable(TableName, byte[][], byte[][], byte[][], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#createTestTable-org.apache.hadoop.hbase.TableName-byte:A:A-byte:A:A-byte:A:A-byte:A-">createTestTable(TableName, byte[][], byte[][], byte[][], byte[])</a></span> - Static 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>&nbsp;</dd>
@@ -9155,6 +9167,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#doSyncs">doSyncs</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html" title="class in org.apache.hadoop.hbase.wal">IOTestProvider.IOTestWriter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#doTest-boolean-">doTest(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.html#doTest-boolean-boolean-">doTest(boolean, boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/TestWALCellCodecWithCompression.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALCellCodecWithCompression</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestIOFencing.html#doTest-java.lang.Class-org.apache.hadoop.hbase.MemoryCompactionPolicy-">doTest(Class&lt;?&gt;, MemoryCompactionPolicy)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestIOFencing.html" title="class in org.apache.hadoop.hbase">TestIOFencing</a></dt>
@@ -10465,6 +10479,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/codec/prefixtree/row/data/TestRowDataMultiFamilies.html#famBB">famBB</a></span> - Static variable in class org.apache.hadoop.hbase.codec.prefixtree.row.data.<a href="org/apache/hadoop/hbase/codec/prefixtree/row/data/TestRowDataMultiFamilies.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.row.data">TestRowDataMultiFamilies</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILIES">FAMILIES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotMetadata.html#families">families</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotMetadata.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotMetadata</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestTableSnapshotScanner.html#FAMILIES">FAMILIES</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>
@@ -10499,8 +10515,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionReplicaFailover.html#families">families</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionReplicaFailover.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionReplicaFailover</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#FAMILIES">FAMILIES</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#FAMILIES">FAMILIES</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.html#FAMILIES">FAMILIES</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.html" title="class in org.apache.hadoop.hbase.regionserver">TestWalAndCompactingMemStoreFlush</a></dt>
@@ -10533,6 +10547,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">AbstractTestAsyncTableScan</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.example.<a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html" title="class in org.apache.hadoop.hbase.client.example">TestHttpProxyExample</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncAdminBase.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncAdminBase.html" title="class in org.apache.hadoop.hbase.client">TestAsyncAdminBase</a></dt>
@@ -10711,8 +10727,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestNewVersionBehaviorFromClientSide.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestNewVersionBehaviorFromClientSide.html" title="class in org.apache.hadoop.hbase.regionserver">TestNewVersionBehaviorFromClientSide</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#FAMILY">FAMILY</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html#FAMILY">FAMILY</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWithBloomError</a></dt>
@@ -11085,6 +11099,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.html#filterExpectedResults-java.util.Set-byte:A-byte:A-int-">filterExpectedResults(Set&lt;String&gt;, byte[], byte[], int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.html" title="class in org.apache.hadoop.hbase.regionserver">TestSeekOptimizations</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#filterKeyValue-org.apache.hadoop.hbase.Cell-">filterKeyValue(Cell)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html#filterKeyValue-org.apache.hadoop.hbase.Cell-">filterKeyValue(Cell)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client">ColumnCountOnRowFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestHCM.BlockingFilter.html#filterKeyValue-org.apache.hadoop.hbase.Cell-">filterKeyValue(Cell)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestHCM.BlockingFilter.html" title="class in org.apache.hadoop.hbase.client">TestHCM.BlockingFilter</a></dt>
@@ -11105,8 +11121,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><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="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.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/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor.SparseFilter</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><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="memberNameLink"><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>
@@ -19812,8 +19826,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanner.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanner</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerRetriableFailure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWithBloomError</a></dt>
@@ -23121,9 +23133,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestScannerSelectionUsingTTL.html#NUM_EXPIRED_FILES">NUM_EXPIRED_FILES</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestScannerSelectionUsingTTL.html" title="class in org.apache.hadoop.hbase.io.hfile">TestScannerSelectionUsingTTL</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#NUM_FAMILIES">NUM_FAMILIES</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_FAMILIES">NUM_FAMILIES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#NUM_FAMILIES">NUM_FAMILIES</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#NUM_FAMILIES">NUM_FAMILIES</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#NUM_FAMILIES">NUM_FAMILIES</a></span> - Static variable 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>&nbsp;</dd>
@@ -23207,9 +23219,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.html#NUM_PROCS_OPTION">NUM_PROCS_OPTION</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALPerformanceEvaluation</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#NUM_QUALIFIERS">NUM_QUALIFIERS</a></span> - Static variable 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>&nbsp;</dd>
@@ -23251,6 +23263,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestSpaceQuotas.html#NUM_RETRIES">NUM_RETRIES</a></span> - Static variable in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestSpaceQuotas.html" title="class in org.apache.hadoop.hbase.quotas">TestSpaceQuotas</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSizeFailures.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
@@ -23267,8 +23281,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestMultiColumnScanner</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.html" title="class in org.apache.hadoop.hbase.regionserver">TestSeekOptimizations</a></dt>
@@ -24451,6 +24463,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/LoadTestTool.html#parseColumnFamilyOptions-org.apache.commons.cli.CommandLine-">parseColumnFamilyOptions(CommandLine)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/LoadTestTool.html" title="class in org.apache.hadoop.hbase.util">LoadTestTool</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#parseFrom-byte:A-">parseFrom(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html#parseFrom-byte:A-">parseFrom(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client">ColumnCountOnRowFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestHCM.BlockingFilter.html#parseFrom-byte:A-">parseFrom(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestHCM.BlockingFilter.html" title="class in org.apache.hadoop.hbase.client">TestHCM.BlockingFilter</a></dt>
@@ -24461,8 +24475,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterList.AlwaysNextColFilter.html#parseFrom-byte:A-">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="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html#parseFrom-byte:A-">parseFrom(byte[])</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor.SparseFilter</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#parseFrom-byte:A-">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="memberNameLink"><a href="org/apache/hadoop/hbase/util/MultiThreadedAction.html#parseMutateInfo-byte:A-">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>
@@ -27003,6 +27015,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html#qualFromId-int-">qualFromId(int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWithBloomError</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIER">QUALIFIER</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html#QUALIFIER">QUALIFIER</a></span> - Static variable in class org.apache.hadoop.hbase.client.example.<a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html" title="class in org.apache.hadoop.hbase.client.example">TestHttpProxyExample</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html#QUALIFIER">QUALIFIER</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">TestAsyncSingleRequestRpcRetryingCaller</a></dt>
@@ -27073,8 +27087,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html#qualifier">qualifier</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerMetrics</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#QUALIFIER">QUALIFIER</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#QUALIFIER">QUALIFIER</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSplitWalDataLoss.html#qualifier">qualifier</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitWalDataLoss.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitWalDataLoss</a></dt>
@@ -27141,6 +27153,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html#qualifierCol1">qualifierCol1</a></span> - Static variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html" title="class in org.apache.hadoop.hbase.coprocessor">TestIncrementTimeRange</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#QUALIFIERS">QUALIFIERS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/codec/prefixtree/row/data/TestRowDataComplexQualifiers.html#qualifiers">qualifiers</a></span> - Static variable in class org.apache.hadoop.hbase.codec.prefixtree.row.data.<a href="org/apache/hadoop/hbase/codec/prefixtree/row/data/TestRowDataComplexQualifiers.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.row.data">TestRowDataComplexQualifiers</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#QUALIFIERS">QUALIFIERS</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
@@ -27149,8 +27163,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegion.PutThread.html#qualifiers">qualifiers</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegion.PutThread.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion.PutThread</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#QUALIFIERS">QUALIFIERS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#QUALIFIERS">QUALIFIERS</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStore.html#qualifiers">qualifiers</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestStore</a></dt>
@@ -28792,6 +28804,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html#reverse">reverse</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.ScanThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.ScanThread</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#reversed">reversed</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestFromClientSide.html#reverseScanTest-org.apache.hadoop.hbase.client.Table-boolean-">reverseScanTest(Table, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestFromClientSide.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.html#revokeFromNamespace-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">revokeFromNamespace(HBaseTestingUtility, String, String, Permission.Action...)</a></span> - Static method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/SecureTestUtil.html" title="class in org.apache.hadoop.hbase.security.access">SecureTestUtil</a></dt>
@@ -29009,6 +29023,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/codec/prefixtree/builder/TestTokenizer.html#roundTripped">roundTripped</a></span> - Variable in class org.apache.hadoop.hbase.codec.prefixtree.builder.<a href="org/apache/hadoop/hbase/codec/prefixtree/builder/TestTokenizer.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.builder">TestTokenizer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.client.example.<a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html" title="class in org.apache.hadoop.hbase.client.example">TestHttpProxyExample</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">TestAsyncSingleRequestRpcRetryingCaller</a></dt>
@@ -29113,8 +29129,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestReversibleScanners.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestReversibleScanners.html" title="class in org.apache.hadoop.hbase.regionserver">TestReversibleScanners</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#ROW">ROW</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html#ROW">ROW</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanWithBloomError</a></dt>
@@ -29525,6 +29539,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/RowResourceBase.html#RowResourceBase--">RowResourceBase()</a></span> - Constructor for class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RowResourceBase.html" title="class in org.apache.hadoop.hbase.rest">RowResourceBase</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.html" title="class in org.apache.hadoop.hbase.client">TestAvoidCellReferencesIntoShippedBlocks</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient</a></dt>
@@ -29557,8 +29573,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestReversibleScanners.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestReversibleScanners.html" title="class in org.apache.hadoop.hbase.regionserver">TestReversibleScanners</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#ROWS">ROWS</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html#ROWS">ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestGlobalThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestGlobalThrottler</a></dt>
@@ -32332,6 +32346,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup">TestBackupHFileCleaner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestShell.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client">AbstractTestShell</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdmin</a></dt>
@@ -32586,8 +32602,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionFavoredNodes</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerWithBulkload</a></dt>
@@ -34020,7 +34034,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/SpaceQuotaHelperForTests.SpaceQuotaSnapshotPredicate.html#SpaceQuotaSnapshotPredicate-org.apache.hadoop.hbase.client.Connection-org.apache.hadoop.hbase.TableName-java.lang.String-">SpaceQuotaSnapshotPredicate(Connection, TableName, String)</a></span> - Constructor for class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/SpaceQuotaHelperForTests.SpaceQuotaSnapshotPredicate.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaHelperForTests.SpaceQuotaSnapshotPredicate</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html#SparseFilter--">SparseFilter()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor.SparseFilter</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#SparseFilter-boolean-">SparseFilter(boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.SparseFilter.html#SparseFilter--">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>
@@ -35546,8 +35560,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.html#table">table</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerReadRequestMetrics</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TABLE">TABLE</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#TABLE">TABLE</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStore.html#table">table</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStore.html" title="class in org.apache.hadoop.hbase.regionserver">TestStore</a></dt>
@@ -35674,6 +35686,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">AbstractTestAsyncTableScan</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>
+<div class="block">Table configuration</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/example/TestAsyncClientExample.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.example.<a href="org/apache/hadoop/hbase/client/example/TestAsyncClientExample.html" title="class in org.apache.hadoop.hbase.client.example">TestAsyncClientExample</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.example.<a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html" title="class in org.apache.hadoop.hbase.client.example">TestHttpProxyExample</a></dt>
@@ -35770,10 +35786,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerReadRequestMetrics</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>
-<div class="block">Table configuration</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable 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">Table configuration</div>
@@ -36804,6 +36816,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup">TestBackupHFileCleaner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestShell.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client">AbstractTestShell</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdmin</a></dt>
@@ -37036,8 +37050,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionFavoredNodes.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionFavoredNodes</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerWithBulkload</a></dt>
@@ -37712,6 +37724,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">AbstractTestAsyncTableScan</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestShell.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client">AbstractTestShell</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdmin</a></dt>
@@ -38110,8 +38124,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanner.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanner</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerWithBulkload</a></dt>
@@ -45265,12 +45277,18 @@
 <dd>
 <div class="block">Test that abort is called when lockHeartbeat fails with IOException.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#testHeartbeatWithSparseFilter--">testHeartbeatWithSparseFilter()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#testHeartbeatWithSparseFilter--">testHeartbeatWithSparseFilter()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestScanCursor.html#testHeartbeatWithSparseFilter--">testHeartbeatWithSparseFilter()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><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><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#testHeartbeatWithSparseFilterReversed--">testHeartbeatWithSparseFilterReversed()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestScanCursor.html#testHeartbeatWithSparseFilterReversed--">testHeartbeatWithSparseFilterReversed()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hbase/archetypes/exemplars/client/TestHelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client"><span class="typeNameLink">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>
@@ -50652,6 +50670,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestRateLimiter.html#TestRateLimiter--">TestRateLimiter()</a></span> - Constructor for class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestRateLimiter.html" title="class in org.apache.hadoop.hbase.quotas">TestRateLimiter</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestRawAsyncScanCursor</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html#TestRawAsyncScanCursor--">TestRawAsyncScanCursor()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestRawAsyncTableLimitedScanWithFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>
 <div class="block">With filter we may stop at a middle of row and think that we still have more cells for the
@@ -53152,6 +53174,10 @@
 <dd>
 <div class="block">Test from client side for batch of scan</div>
 </dd>
+<dt><a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestScanCursor</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestScanCursor.html#TestScanCursor--">TestScanCursor()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">TestScanDeleteTracker</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/querymatcher/package-summary.html">org.apache.hadoop.hbase.regionserver.querymatcher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.html#TestScanDeleteTracker--">TestScanDeleteTracker()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.querymatcher.<a href="org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.html" title="class in org.apache.hadoop.hbase.regionserver.querymatcher">TestScanDeleteTracker</a></dt>
@@ -53279,12 +53305,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html#testScanner_Wildcard_FromMemStoreAndFiles_EnforceVersions--">testScanner_Wildcard_FromMemStoreAndFiles_EnforceVersions()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerCursor</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="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TestScannerCursor--">TestScannerCursor()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestScannerCursor.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="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestKeyValueHeap.html#testScannerException--">testScannerException()</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><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestFromClientSide.html#testScannerFailsAfterRetriesWhenCoprocessorThrowsIOE--">testScannerFailsAfterRetriesWhenCoprocessorThrowsIOE()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestFromClientSide.html" title="class in org.apache.hadoop.hbase.client">TestFromClientSide</a></dt>
@@ -54403,7 +54423,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestClientScanner.html#testSizeLimit--">testSizeLimit()</a></span> - Method 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="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#testSizeLimit--">testSizeLimit()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestScanCursor.html#testSizeLimit--">testSizeLimit()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestRegionLocations.html#testSizeMethods--">testSizeMethods()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestRegionLocations.html" title="class in org.apache.hadoop.hbase">TestRegionLocations</a></dt>
 <dd>&nbsp;</dd>
@@ -57180,6 +57200,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestWarmupRegion.html#TestWarmupRegion--">TestWarmupRegion()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestWarmupRegion.html" title="class in org.apache.hadoop.hbase.master">TestWarmupRegion</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#testWarnStuckTasks--">testWarnStuckTasks()</a></span> - Method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TestTaskMonitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/TestWeakObjectPool.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestWeakObjectPool</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestWeakObjectPool.html#TestWeakObjectPool--">TestWeakObjectPool()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestWeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">TestWeakObjectPool</a></dt>
@@ -57792,6 +57814,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.html#TIMEOUT">TIMEOUT</a></span> - Static variable in 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="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#TIMEOUT">TIMEOUT</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html#timeout">timeout</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcess</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestHCM.html#timeout">timeout</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestHCM.html" title="class in org.apache.hadoop.hbase.client">TestHCM</a></dt>
@@ -57896,8 +57920,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScanner.html#timeout">timeout</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestScanner</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#TIMEOUT">TIMEOUT</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html#timeout">timeout</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.html" title="class in org.apache.hadoop.hbase.regionserver">TestSplitTransactionOnCluster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.html#timeout">timeout</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreScanner</a></dt>
@@ -58058,6 +58080,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/LoadTestDataGeneratorWithVisibilityLabels.html#toAuthorizationsSet-java.lang.String-">toAuthorizationsSet(String)</a></span> - Static method in class org.apache.hadoop.hbase.security.visibility.<a href="org/apache/hadoop/hbase/security/visibility/LoadTestDataGeneratorWithVisibilityLabels.html" title="class in org.apache.hadoop.hbase.security.visibility">LoadTestDataGeneratorWithVisibilityLabels</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html#toByteArray--">toByteArray()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html#toByteArray--">toByteArray()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client">ColumnCountOnRowFilter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html#toByteArray--">toByteArray()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html" title="class in org.apache.hadoop.hbase.filter">TestFilter.OldTestFilter</a></dt>
@@ -59462,6 +59486,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestOrder.html#VALS">VALS</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestOrder.html" title="class in org.apache.hadoop.hbase.util">TestOrder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.client.example.<a href="org/apache/hadoop/hbase/client/example/TestHttpProxyExample.html" title="class in org.apache.hadoop.hbase.client.example">TestHttpProxyExample</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.html" title="class in org.apache.hadoop.hbase.client">TestAsyncSingleRequestRpcRetryingCaller</a></dt>
@@ -59516,8 +59542,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestReversibleScanners.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestReversibleScanners.html" title="class in org.apache.hadoop.hbase.regionserver">TestReversibleScanners</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#VALUE">VALUE</a></span> - Static variable 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.html#VALUE">VALUE</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreScanner</a></dt>
@@ -59644,9 +59668,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestSwitchToStreamRead.html#VALUE_PREFIX">VALUE_PREFIX</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestSwitchToStreamRead.html" title="class in org.apache.hadoop.hbase.regionserver">TestSwitchToStreamRead</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#VALUE_SIZE">VALUE_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html#VALUE_SIZE">VALUE_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#VALUE_SIZE">VALUE_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html#VALUE_SIZE">VALUE_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterFromRegionSide.html" title="class in org.apache.hadoop.hbase.filter">TestFilterFromRegionSide</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html#VALUE_SIZE">VALUE_SIZE</a></span> - Static variable 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>&nbsp;</dd>


[45/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html b/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
index 6ecabed..59c2836 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
@@ -25,108 +25,116 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.client.Result;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Receives {@link Result} for an asynchronous scan.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * &lt;p&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.31"></a>
-<span class="sourceLineNo">032</span> */<a name="line.32"></a>
-<span class="sourceLineNo">033</span>@InterfaceAudience.Public<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public interface RawScanResultConsumer {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * Used to resume a scan.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  @InterfaceAudience.Public<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  interface ScanResumer {<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>    /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.43"></a>
-<span class="sourceLineNo">044</span>     * effect.<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    void resume();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Used to suspend or stop a scan.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * &lt;p&gt;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * Notice that, you should only call the methods below inside onNext or onHeartbeat method. A<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * IllegalStateException will be thrown if you call them at other places.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * &lt;p&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * You can only call one of the methods below, i.e., call suspend or terminate(of course you are<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * free to not call them both), and the methods are not reentrant. A IllegalStateException will be<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * thrown if you have already called one of the methods.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @InterfaceAudience.Public<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  interface ScanController {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>     * Suspend the scan.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>     * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.65"></a>
-<span class="sourceLineNo">066</span>     * before you resume the scan.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>     * @return A resumer used to resume the scan later.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>     */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ScanResumer suspend();<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>     * Terminate the scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    void terminate();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Indicate that we have receive some data.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param results the data fetched from HBase service.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  void onNext(Result[] results, ScanController controller);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * onNext.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  default void onHeartbeat(ScanController controller) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * &lt;p&gt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.104"></a>
+<span class="sourceLineNo">020</span>import java.util.Optional;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.Result;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * Receives {@link Result} for an asynchronous scan.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;p&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.33"></a>
+<span class="sourceLineNo">034</span> */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>@InterfaceAudience.Public<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public interface RawScanResultConsumer {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * Used to resume a scan.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @InterfaceAudience.Public<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  interface ScanResumer {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.45"></a>
+<span class="sourceLineNo">046</span>     * effect.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    void resume();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * Used to suspend or stop a scan, or get a scan cursor if available.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Notice that, you should only call the {@link #suspend()} or {@link #terminate()} inside onNext<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * &lt;p&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * You can only call one of the {@link #suspend()} and {@link #terminate()} methods(of course you<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * are free to not call them both), and the methods are not reentrant. An IllegalStateException<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * will be thrown if you have already called one of the methods.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @InterfaceAudience.Public<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  interface ScanController {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>     * Suspend the scan.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>     * &lt;p&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.67"></a>
+<span class="sourceLineNo">068</span>     * before you resume the scan.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>     * @return A resumer used to resume the scan later.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>     */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ScanResumer suspend();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>     * Terminate the scan.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>     * &lt;p&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    void terminate();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * Get the scan cursor if available.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return The scan cursor.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Optional&lt;Cursor&gt; cursor();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Indicate that we have receive some data.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @param results the data fetched from HBase service.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  void onNext(Result[] results, ScanController controller);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * onNext.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * &lt;p&gt;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  void onError(Throwable error);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * Indicate that the scan operation is completed normally.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  void onComplete();<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>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.117"></a>
+<span class="sourceLineNo">106</span>  default void onHeartbeat(ScanController controller) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;p&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  void onError(Throwable error);<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Indicate that the scan operation is completed normally.<a name="line.117"></a>
 <span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>}<a name="line.121"></a>
+<span class="sourceLineNo">119</span>  void onComplete();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>}<a name="line.129"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index c917dc3..c648087 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -311,7 +311,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 


[27/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
index 6ecabed..59c2836 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
@@ -25,108 +25,116 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.client.Result;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Receives {@link Result} for an asynchronous scan.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * &lt;p&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.31"></a>
-<span class="sourceLineNo">032</span> */<a name="line.32"></a>
-<span class="sourceLineNo">033</span>@InterfaceAudience.Public<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public interface RawScanResultConsumer {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * Used to resume a scan.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  @InterfaceAudience.Public<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  interface ScanResumer {<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>    /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.43"></a>
-<span class="sourceLineNo">044</span>     * effect.<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    void resume();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Used to suspend or stop a scan.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * &lt;p&gt;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * Notice that, you should only call the methods below inside onNext or onHeartbeat method. A<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * IllegalStateException will be thrown if you call them at other places.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * &lt;p&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * You can only call one of the methods below, i.e., call suspend or terminate(of course you are<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * free to not call them both), and the methods are not reentrant. A IllegalStateException will be<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * thrown if you have already called one of the methods.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @InterfaceAudience.Public<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  interface ScanController {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>     * Suspend the scan.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>     * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.65"></a>
-<span class="sourceLineNo">066</span>     * before you resume the scan.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>     * @return A resumer used to resume the scan later.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>     */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ScanResumer suspend();<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>     * Terminate the scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    void terminate();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Indicate that we have receive some data.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param results the data fetched from HBase service.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  void onNext(Result[] results, ScanController controller);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * onNext.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  default void onHeartbeat(ScanController controller) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * &lt;p&gt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.104"></a>
+<span class="sourceLineNo">020</span>import java.util.Optional;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.Result;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * Receives {@link Result} for an asynchronous scan.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;p&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.33"></a>
+<span class="sourceLineNo">034</span> */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>@InterfaceAudience.Public<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public interface RawScanResultConsumer {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * Used to resume a scan.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @InterfaceAudience.Public<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  interface ScanResumer {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.45"></a>
+<span class="sourceLineNo">046</span>     * effect.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    void resume();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * Used to suspend or stop a scan, or get a scan cursor if available.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Notice that, you should only call the {@link #suspend()} or {@link #terminate()} inside onNext<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * &lt;p&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * You can only call one of the {@link #suspend()} and {@link #terminate()} methods(of course you<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * are free to not call them both), and the methods are not reentrant. An IllegalStateException<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * will be thrown if you have already called one of the methods.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @InterfaceAudience.Public<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  interface ScanController {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>     * Suspend the scan.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>     * &lt;p&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.67"></a>
+<span class="sourceLineNo">068</span>     * before you resume the scan.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>     * @return A resumer used to resume the scan later.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>     */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ScanResumer suspend();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>     * Terminate the scan.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>     * &lt;p&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    void terminate();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * Get the scan cursor if available.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return The scan cursor.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Optional&lt;Cursor&gt; cursor();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Indicate that we have receive some data.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @param results the data fetched from HBase service.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  void onNext(Result[] results, ScanController controller);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * onNext.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * &lt;p&gt;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  void onError(Throwable error);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * Indicate that the scan operation is completed normally.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  void onComplete();<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>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.117"></a>
+<span class="sourceLineNo">106</span>  default void onHeartbeat(ScanController controller) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;p&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  void onError(Throwable error);<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Indicate that the scan operation is completed normally.<a name="line.117"></a>
 <span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>}<a name="line.121"></a>
+<span class="sourceLineNo">119</span>  void onComplete();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>}<a name="line.129"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
index 6ecabed..59c2836 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
@@ -25,108 +25,116 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.client.Result;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Receives {@link Result} for an asynchronous scan.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * &lt;p&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.31"></a>
-<span class="sourceLineNo">032</span> */<a name="line.32"></a>
-<span class="sourceLineNo">033</span>@InterfaceAudience.Public<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public interface RawScanResultConsumer {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * Used to resume a scan.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  @InterfaceAudience.Public<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  interface ScanResumer {<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>    /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.43"></a>
-<span class="sourceLineNo">044</span>     * effect.<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    void resume();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Used to suspend or stop a scan.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * &lt;p&gt;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * Notice that, you should only call the methods below inside onNext or onHeartbeat method. A<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * IllegalStateException will be thrown if you call them at other places.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * &lt;p&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * You can only call one of the methods below, i.e., call suspend or terminate(of course you are<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * free to not call them both), and the methods are not reentrant. A IllegalStateException will be<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * thrown if you have already called one of the methods.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @InterfaceAudience.Public<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  interface ScanController {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>     * Suspend the scan.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>     * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.65"></a>
-<span class="sourceLineNo">066</span>     * before you resume the scan.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>     * @return A resumer used to resume the scan later.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>     */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ScanResumer suspend();<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>     * Terminate the scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    void terminate();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Indicate that we have receive some data.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param results the data fetched from HBase service.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  void onNext(Result[] results, ScanController controller);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * onNext.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  default void onHeartbeat(ScanController controller) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * &lt;p&gt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.104"></a>
+<span class="sourceLineNo">020</span>import java.util.Optional;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.Result;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * Receives {@link Result} for an asynchronous scan.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;p&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.33"></a>
+<span class="sourceLineNo">034</span> */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>@InterfaceAudience.Public<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public interface RawScanResultConsumer {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * Used to resume a scan.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @InterfaceAudience.Public<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  interface ScanResumer {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.45"></a>
+<span class="sourceLineNo">046</span>     * effect.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    void resume();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * Used to suspend or stop a scan, or get a scan cursor if available.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Notice that, you should only call the {@link #suspend()} or {@link #terminate()} inside onNext<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * &lt;p&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * You can only call one of the {@link #suspend()} and {@link #terminate()} methods(of course you<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * are free to not call them both), and the methods are not reentrant. An IllegalStateException<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * will be thrown if you have already called one of the methods.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @InterfaceAudience.Public<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  interface ScanController {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>     * Suspend the scan.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>     * &lt;p&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.67"></a>
+<span class="sourceLineNo">068</span>     * before you resume the scan.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>     * @return A resumer used to resume the scan later.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>     */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ScanResumer suspend();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>     * Terminate the scan.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>     * &lt;p&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    void terminate();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * Get the scan cursor if available.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return The scan cursor.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Optional&lt;Cursor&gt; cursor();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Indicate that we have receive some data.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @param results the data fetched from HBase service.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  void onNext(Result[] results, ScanController controller);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * onNext.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * &lt;p&gt;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  void onError(Throwable error);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * Indicate that the scan operation is completed normally.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  void onComplete();<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>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.117"></a>
+<span class="sourceLineNo">106</span>  default void onHeartbeat(ScanController controller) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;p&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  void onError(Throwable error);<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Indicate that the scan operation is completed normally.<a name="line.117"></a>
 <span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>}<a name="line.121"></a>
+<span class="sourceLineNo">119</span>  void onComplete();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>}<a name="line.129"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
index 6ecabed..59c2836 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
@@ -25,108 +25,116 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.client.Result;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Receives {@link Result} for an asynchronous scan.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * &lt;p&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.31"></a>
-<span class="sourceLineNo">032</span> */<a name="line.32"></a>
-<span class="sourceLineNo">033</span>@InterfaceAudience.Public<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public interface RawScanResultConsumer {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * Used to resume a scan.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  @InterfaceAudience.Public<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  interface ScanResumer {<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>    /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.43"></a>
-<span class="sourceLineNo">044</span>     * effect.<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    void resume();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Used to suspend or stop a scan.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * &lt;p&gt;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * Notice that, you should only call the methods below inside onNext or onHeartbeat method. A<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * IllegalStateException will be thrown if you call them at other places.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * &lt;p&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * You can only call one of the methods below, i.e., call suspend or terminate(of course you are<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * free to not call them both), and the methods are not reentrant. A IllegalStateException will be<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * thrown if you have already called one of the methods.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @InterfaceAudience.Public<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  interface ScanController {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>     * Suspend the scan.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>     * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.65"></a>
-<span class="sourceLineNo">066</span>     * before you resume the scan.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>     * @return A resumer used to resume the scan later.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>     */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ScanResumer suspend();<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>     * Terminate the scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    void terminate();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Indicate that we have receive some data.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param results the data fetched from HBase service.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  void onNext(Result[] results, ScanController controller);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * onNext.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  default void onHeartbeat(ScanController controller) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * &lt;p&gt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.104"></a>
+<span class="sourceLineNo">020</span>import java.util.Optional;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.Result;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * Receives {@link Result} for an asynchronous scan.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;p&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.33"></a>
+<span class="sourceLineNo">034</span> */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>@InterfaceAudience.Public<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public interface RawScanResultConsumer {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * Used to resume a scan.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @InterfaceAudience.Public<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  interface ScanResumer {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.45"></a>
+<span class="sourceLineNo">046</span>     * effect.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    void resume();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * Used to suspend or stop a scan, or get a scan cursor if available.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Notice that, you should only call the {@link #suspend()} or {@link #terminate()} inside onNext<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * &lt;p&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * You can only call one of the {@link #suspend()} and {@link #terminate()} methods(of course you<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * are free to not call them both), and the methods are not reentrant. An IllegalStateException<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * will be thrown if you have already called one of the methods.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @InterfaceAudience.Public<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  interface ScanController {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>     * Suspend the scan.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>     * &lt;p&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.67"></a>
+<span class="sourceLineNo">068</span>     * before you resume the scan.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>     * @return A resumer used to resume the scan later.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>     */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ScanResumer suspend();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>     * Terminate the scan.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>     * &lt;p&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    void terminate();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * Get the scan cursor if available.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return The scan cursor.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Optional&lt;Cursor&gt; cursor();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Indicate that we have receive some data.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @param results the data fetched from HBase service.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  void onNext(Result[] results, ScanController controller);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * onNext.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * &lt;p&gt;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  void onError(Throwable error);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * Indicate that the scan operation is completed normally.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  void onComplete();<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>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.117"></a>
+<span class="sourceLineNo">106</span>  default void onHeartbeat(ScanController controller) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;p&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  void onError(Throwable error);<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Indicate that the scan operation is completed normally.<a name="line.117"></a>
 <span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>}<a name="line.121"></a>
+<span class="sourceLineNo">119</span>  void onComplete();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>}<a name="line.129"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
index 01104c2..ddb2860 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
@@ -259,9 +259,15 @@
 <span class="sourceLineNo">251</span>    if (getState() != State.RUNNING) {<a name="line.251"></a>
 <span class="sourceLineNo">252</span>      return super.toString();<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return super.toString() + ", rpcMethod=" + getRPC();<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">254</span>    return super.toString()<a name="line.254"></a>
+<span class="sourceLineNo">255</span>        + ", queuetimems=" + getRPCQueueTime()<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        + ", starttimems=" + getRPCStartTime()<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        + ", clientaddress=" + clientAddress<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        + ", remoteport=" + remotePort<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        + ", packetlength=" + getRPCPacketLength()<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        + ", rpcMethod=" + getRPC();<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html
index d489024..53051b3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html
@@ -47,43 +47,45 @@
 <span class="sourceLineNo">039</span>  State getState();<a name="line.39"></a>
 <span class="sourceLineNo">040</span>  long getStateTime();<a name="line.40"></a>
 <span class="sourceLineNo">041</span>  long getCompletionTimestamp();<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  void markComplete(String msg);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  void pause(String msg);<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  void resume(String msg);<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  void abort(String msg);<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  void expireNow();<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  void setStatus(String status);<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  void setDescription(String description);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  /**<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * Explicitly mark this status as able to be cleaned up,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * even though it might not be complete.<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  void cleanup();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * Public exposure of Object.clone() in order to allow clients to easily <a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * capture current state.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * @return a copy of the object whose references will not change<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  MonitoredTask clone();<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  /**<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * Creates a string map of internal details for extensible exposure of <a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * monitored tasks.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * @return A Map containing information for this task.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  Map&lt;String, Object&gt; toMap() throws IOException;<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>   * Creates a JSON object for parseable exposure of monitored tasks.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @return An encoded JSON object containing information for this task.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  String toJSON() throws IOException;<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">042</span>  long getWarnTime();<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  void markComplete(String msg);<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  void pause(String msg);<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  void resume(String msg);<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  void abort(String msg);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  void expireNow();<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  void setStatus(String status);<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  void setDescription(String description);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  void setWarnTime(final long t);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Explicitly mark this status as able to be cleaned up,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * even though it might not be complete.<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  void cleanup();<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * Public exposure of Object.clone() in order to allow clients to easily <a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * capture current state.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @return a copy of the object whose references will not change<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  MonitoredTask clone();<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Creates a string map of internal details for extensible exposure of <a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * monitored tasks.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * @return A Map containing information for this task.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  Map&lt;String, Object&gt; toMap() throws IOException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * Creates a JSON object for parseable exposure of monitored tasks.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @return An encoded JSON object containing information for this task.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  String toJSON() throws IOException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>}<a name="line.80"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
index d489024..53051b3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
@@ -47,43 +47,45 @@
 <span class="sourceLineNo">039</span>  State getState();<a name="line.39"></a>
 <span class="sourceLineNo">040</span>  long getStateTime();<a name="line.40"></a>
 <span class="sourceLineNo">041</span>  long getCompletionTimestamp();<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  void markComplete(String msg);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  void pause(String msg);<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  void resume(String msg);<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  void abort(String msg);<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  void expireNow();<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  void setStatus(String status);<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  void setDescription(String description);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  /**<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * Explicitly mark this status as able to be cleaned up,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * even though it might not be complete.<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  void cleanup();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * Public exposure of Object.clone() in order to allow clients to easily <a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * capture current state.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * @return a copy of the object whose references will not change<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  MonitoredTask clone();<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  /**<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * Creates a string map of internal details for extensible exposure of <a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * monitored tasks.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * @return A Map containing information for this task.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  Map&lt;String, Object&gt; toMap() throws IOException;<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>   * Creates a JSON object for parseable exposure of monitored tasks.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @return An encoded JSON object containing information for this task.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  String toJSON() throws IOException;<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">042</span>  long getWarnTime();<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  void markComplete(String msg);<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  void pause(String msg);<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  void resume(String msg);<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  void abort(String msg);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  void expireNow();<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  void setStatus(String status);<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  void setDescription(String description);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  void setWarnTime(final long t);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Explicitly mark this status as able to be cleaned up,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * even though it might not be complete.<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  void cleanup();<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * Public exposure of Object.clone() in order to allow clients to easily <a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * capture current state.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @return a copy of the object whose references will not change<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  MonitoredTask clone();<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Creates a string map of internal details for extensible exposure of <a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * monitored tasks.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * @return A Map containing information for this task.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  Map&lt;String, Object&gt; toMap() throws IOException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * Creates a JSON object for parseable exposure of monitored tasks.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @return An encoded JSON object containing information for this task.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  String toJSON() throws IOException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>}<a name="line.80"></a>
 
 
 


[33/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 16bd608..71147b9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -131,10 +131,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteCompare</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 7cba16c..33cb6b6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,8 +248,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 d5d4962..66b8b75 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,8 +137,8 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 76a1f29..689bda0 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 29f4bfc..cd08056 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -198,9 +198,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index ef802fb..3ded3f7 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -167,8 +167,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index e697d22..4075a25 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -3624,6 +3624,7 @@
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TagType.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TagType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TagUtil.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TagUtil</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.MonitorRunnable</span></a> (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.PassthroughInvocationHandler</span></a>&lt;T&gt; (implements java.lang.reflect.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/InvocationHandler.html?is-external=true" title="class or interface in java.lang.reflect">InvocationHandler</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskAndWeakRefPair</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/TBoundedThreadPoolServer.ClientConnnection.html" title="class in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">TBoundedThreadPoolServer.ClientConnnection</span></a> (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 223c5fc..ff52dab 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "794a3b104bf62d028fc8ae27596c3b98ef87e507";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "624652373e6fb11a7aee0ce8bcfb7a394ed89dcb";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Wed Aug  9 18:36:23 UTC 2017";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Aug 10 14:40:12 UTC 2017";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://asf920.gq1.ygridcore.net/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "6ce15c7f0bdbe861f872fdd126801909";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "e53f3223b937b85695ec877f367c9fc2";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[04/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.SparseFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.SparseFilter.html b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.SparseFilter.html
new file mode 100644
index 0000000..8e1773f
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.SparseFilter.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.client.AbstractTestScanCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.client.AbstractTestScanCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/AbstractTestScanCursor.SparseFilter.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.client.AbstractTestScanCursor.SparseFilter" class="title">Uses of Class<br>org.apache.hadoop.hbase.client.AbstractTestScanCursor.SparseFilter</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.client.AbstractTestScanCursor.SparseFilter</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/AbstractTestScanCursor.SparseFilter.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.html b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.html
new file mode 100644
index 0000000..06ff6fc
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.client.AbstractTestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.client.AbstractTestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/AbstractTestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.client.AbstractTestScanCursor" class="title">Uses of Class<br>org.apache.hadoop.hbase.client.AbstractTestScanCursor</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" 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/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</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.client">org.apache.hadoop.hbase.client</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.client">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a> in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
+<caption><span>Subclasses of <a href="../../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a> in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/AbstractTestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="AbstractTestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestRawAsyncScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestRawAsyncScanCursor.html b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestRawAsyncScanCursor.html
new file mode 100644
index 0000000..e0b4e73
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestRawAsyncScanCursor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.client.TestRawAsyncScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.client.TestRawAsyncScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/TestRawAsyncScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestRawAsyncScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.client.TestRawAsyncScanCursor" class="title">Uses of Class<br>org.apache.hadoop.hbase.client.TestRawAsyncScanCursor</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.client.TestRawAsyncScanCursor</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/TestRawAsyncScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestRawAsyncScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestScanCursor.html b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestScanCursor.html
new file mode 100644
index 0000000..8fd0d2e
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/class-use/TestScanCursor.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.client.TestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.client.TestScanCursor (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/TestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.client.TestScanCursor" class="title">Uses of Class<br>org.apache.hadoop.hbase.client.TestScanCursor</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.client.TestScanCursor</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">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/client/class-use/TestScanCursor.html" target="_top">Frames</a></li>
+<li><a href="TestScanCursor.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
index e612818..b4d219f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-frame.html
@@ -20,6 +20,8 @@
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
 <li><a href="AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">AbstractTestAsyncTableScan</a></li>
+<li><a href="AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">AbstractTestScanCursor</a></li>
+<li><a href="AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">AbstractTestScanCursor.SparseFilter</a></li>
 <li><a href="AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">AbstractTestShell</a></li>
 <li><a href="ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">ColumnCountOnRowFilter</a></li>
 <li><a href="HConnectionTestingUtility.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">HConnectionTestingUtility</a></li>
@@ -183,6 +185,7 @@
 <li><a href="TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPutDotHas</a></li>
 <li><a href="TestPutWithDelete.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPutWithDelete</a></li>
 <li><a href="TestPutWriteToWal.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestPutWriteToWal</a></li>
+<li><a href="TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncScanCursor</a></li>
 <li><a href="TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncTableLimitedScanWithFilter</a></li>
 <li><a href="TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncTablePartialScan</a></li>
 <li><a href="TestRawAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRawAsyncTableScan</a></li>
@@ -203,6 +206,7 @@
 <li><a href="TestRpcControllerFactory.CountingRpcController.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRpcControllerFactory.CountingRpcController</a></li>
 <li><a href="TestRpcControllerFactory.StaticRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestRpcControllerFactory.StaticRpcControllerFactory</a></li>
 <li><a href="TestScan.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestScan</a></li>
+<li><a href="TestScanCursor.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestScanCursor</a></li>
 <li><a href="TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestScannersFromClientSide</a></li>
 <li><a href="TestScannersFromClientSide2.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestScannersFromClientSide2</a></li>
 <li><a href="TestScannerTimeout.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestScannerTimeout</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
index 20aab10..285f30b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-summary.html
@@ -110,6 +110,14 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client">AbstractTestScanCursor.SparseFilter</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client">AbstractTestShell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -881,100 +889,108 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncScanCursor</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableLimitedScanWithFilter</a></td>
 <td class="colLast">
 <div class="block">With filter we may stop at a middle of row and think that we still have more cells for the
  current row but actually all the remaining cells will be filtered out by the filter.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTablePartialScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTablePartialScan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">TestRawAsyncTableScan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicasClient.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient</a></td>
 <td class="colLast">
 <div class="block">Tests for region replicas.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicasClient.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicasClient.SlowMeCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to synchronize the tests.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicationShell.html" title="class in org.apache.hadoop.hbase.client">TestReplicationShell</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.RegionServerHostingPrimayMetaRegionSlowOrStopCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to slow down the primary meta region scan a bit</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.RegionServerStoppedCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.RegionServerStoppedCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to simulate region server down exception for Get and Scan</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestReplicaWithCluster.SlowMeCopro.html" title="class in org.apache.hadoop.hbase.client">TestReplicaWithCluster.SlowMeCopro</a></td>
 <td class="colLast">
 <div class="block">This copro is used to synchronize the tests.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClient</a></td>
 <td class="colLast">
 <div class="block">Test restore snapshots from the client</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClientWithRegionReplicas.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClientWithRegionReplicas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResult.html" title="class in org.apache.hadoop.hbase.client">TestResult</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultFromCoprocessor.html" title="class in org.apache.hadoop.hbase.client">TestResultFromCoprocessor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultFromCoprocessor.MyObserver.html" title="class in org.apache.hadoop.hbase.client">TestResultFromCoprocessor.MyObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestResultSizeEstimation.html" title="class in org.apache.hadoop.hbase.client">TestResultSizeEstimation</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client">TestRpcControllerFactory</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.CountingRpcController.html" title="class in org.apache.hadoop.hbase.client">TestRpcControllerFactory.CountingRpcController</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestRpcControllerFactory.StaticRpcControllerFactory.html" title="class in org.apache.hadoop.hbase.client">TestRpcControllerFactory.StaticRpcControllerFactory</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScan.html" title="class in org.apache.hadoop.hbase.client">TestScan</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client">TestScanCursor</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/TestScannersFromClientSide.html" title="class in org.apache.hadoop.hbase.client">TestScannersFromClientSide</a></td>
 <td class="colLast">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 531eb11..efd3447 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -125,6 +125,12 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestRawAsyncTableScan</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractTestScanCursor</span></a>
+<ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestRawAsyncScanCursor</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestScanCursor.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestScanCursor</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestShell.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractTestShell</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TestReplicationShell.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestReplicationShell</span></a></li>
@@ -165,6 +171,7 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.filter.FilterBase
 <ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractTestScanCursor.SparseFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractTestScanCursor.SparseFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">ColumnCountOnRowFilter</span></a></li>
 <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="typeNameLink">TestHCM.BlockingFilter</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/client/package-use.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/package-use.html b/testdevapidocs/org/apache/hadoop/hbase/client/package-use.html
index 3b623d3..292cfab 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/package-use.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/package-use.html
@@ -110,90 +110,93 @@
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/AbstractTestAsyncTableScan.html#org.apache.hadoop.hbase.client">AbstractTestAsyncTableScan</a>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/AbstractTestShell.html#org.apache.hadoop.hbase.client">AbstractTestShell</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/AbstractTestScanCursor.html#org.apache.hadoop.hbase.client">AbstractTestScanCursor</a>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/ColumnCountOnRowFilter.html#org.apache.hadoop.hbase.client">ColumnCountOnRowFilter</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/AbstractTestShell.html#org.apache.hadoop.hbase.client">AbstractTestShell</a>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/ColumnCountOnRowFilter.html#org.apache.hadoop.hbase.client">ColumnCountOnRowFilter</a>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncAdminBase.html#org.apache.hadoop.hbase.client">TestAsyncAdminBase</a>
 <div class="block">Class to test AsyncAdmin.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncProcess.MyAsyncProcess.html#org.apache.hadoop.hbase.client">TestAsyncProcess.MyAsyncProcess</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncProcess.MyAsyncProcessWithReplicas.html#org.apache.hadoop.hbase.client">TestAsyncProcess.MyAsyncProcessWithReplicas</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncProcess.MyConnectionImpl.html#org.apache.hadoop.hbase.client">TestAsyncProcess.MyConnectionImpl</a>
 <div class="block">Returns our async process.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncProcess.ResponseGenerator.html#org.apache.hadoop.hbase.client">TestAsyncProcess.ResponseGenerator</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncProcess.RR.html#org.apache.hadoop.hbase.client">TestAsyncProcess.RR</a>
 <div class="block">After reading TheDailyWtf, I always wanted to create a MyBoolean enum like this!</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncTableGetMultiThreaded.html#org.apache.hadoop.hbase.client">TestAsyncTableGetMultiThreaded</a>
 <div class="block">Will split the table, and move region randomly when testing.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestAsyncTableScanMetrics.ScanWithMetrics.html#org.apache.hadoop.hbase.client">TestAsyncTableScanMetrics.ScanWithMetrics</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestBlockEvictionFromClient.CustomInnerRegionObserver.html#org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.CustomInnerRegionObserver</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestBlockEvictionFromClient.GetThread.html#org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.GetThread</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestBlockEvictionFromClient.MultiGetThread.html#org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.MultiGetThread</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestBlockEvictionFromClient.ScanThread.html#org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.ScanThread</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestCloneSnapshotFromClient.html#org.apache.hadoop.hbase.client">TestCloneSnapshotFromClient</a>
 <div class="block">Test clone snapshots from the client</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestFromClientSide.html#org.apache.hadoop.hbase.client">TestFromClientSide</a>
 <div class="block">Run tests that use the HBase clients; <code>Table</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestHBaseAdminNoCluster.MethodCaller.html#org.apache.hadoop.hbase.client">TestHBaseAdminNoCluster.MethodCaller</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestIncrementsFromClientSide.html#org.apache.hadoop.hbase.client">TestIncrementsFromClientSide</a>
 <div class="block">Run Increment tests that use the HBase clients; <code>HTable</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestMetaCache.ExceptionInjector.html#org.apache.hadoop.hbase.client">TestMetaCache.ExceptionInjector</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestMetaCache.FakeRSRpcServices.html#org.apache.hadoop.hbase.client">TestMetaCache.FakeRSRpcServices</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestRestoreSnapshotFromClient.html#org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClient</a>
 <div class="block">Test restore snapshots from the client</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestSnapshotCloneIndependence.html#org.apache.hadoop.hbase.client">TestSnapshotCloneIndependence</a>
 <div class="block">Test to verify that the cloned table is independent of the table from which it was cloned</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/TestSnapshotFromClient.html#org.apache.hadoop.hbase.client">TestSnapshotFromClient</a>
 <div class="block">Test create/using/deleting snapshots from the client</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html b/testdevapidocs/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
index 194ed85..524dc42 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.31">TestTaskMonitor</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.33">TestTaskMonitor</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -162,6 +162,10 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#testTasksGetAbortedOnLeak--">testTasksGetAbortedOnLeak</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#testWarnStuckTasks--">testWarnStuckTasks</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -190,7 +194,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestTaskMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.31">TestTaskMonitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.33">TestTaskMonitor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -207,7 +211,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testTaskMonitorBasics</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.34">testTaskMonitorBasics</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.36">testTaskMonitorBasics</a>()</pre>
 </li>
 </ul>
 <a name="testTasksGetAbortedOnLeak--">
@@ -216,7 +220,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testTasksGetAbortedOnLeak</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.61">testTasksGetAbortedOnLeak</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.65">testTasksGetAbortedOnLeak</a>()
                                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -230,7 +234,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testTaskLimit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.92">testTaskLimit</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.98">testTaskLimit</a>()
                    throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -241,10 +245,10 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <a name="testDoNotPurgeRPCTask--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testDoNotPurgeRPCTask</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.105">testDoNotPurgeRPCTask</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.112">testDoNotPurgeRPCTask</a>()
                            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -252,6 +256,20 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
+<a name="testWarnStuckTasks--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testWarnStuckTasks</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html#line.132">testWarnStuckTasks</a>()
+                        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 64e86d4..eed5434 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -205,9 +205,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScanner.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScanner.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScanner.html
index ada3ed9..f8315e7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScanner.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScanner.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScanner.html" target="_top">Frames</a></li>
@@ -763,7 +763,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRSStatusServlet.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScanner.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html
deleted file mode 100644
index 88a7f1a..0000000
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html
+++ /dev/null
@@ -1,350 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>TestScannerCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TestScannerCursor.SparseFilter (Apache HBase 3.0.0-SNAPSHOT Test API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestScannerCursor.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/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.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 TestScannerCursor.SparseFilter" class="title">Class TestScannerCursor.SparseFilter</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.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.TestScannerCursor.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/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerCursor</a></dd>
-</dl>
-<hr>
-<br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.html#line.129">TestScannerCursor.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="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html#SparseFilter--">SparseFilter</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.filter.Filter.ReturnCode</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html#filterKeyValue-org.apache.hadoop.hbase.Cell-">filterKeyValue</a></span>(org.apache.hadoop.hbase.Cell&nbsp;v)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>static org.apache.hadoop.hbase.filter.Filter</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html#parseFrom-byte:A-">parseFrom</a></span>(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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="SparseFilter--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>SparseFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html#line.129">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/TestScannerCursor.SparseFilter.html#line.132">filterKeyValue</a>(org.apache.hadoop.hbase.Cell&nbsp;v)
-                                                                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>filterKeyValue</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.filter.Filter</code></dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="parseFrom-byte:A-">
-<!--   -->
-</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/TestScannerCursor.SparseFilter.html#line.138">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>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/TestScannerCursor.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/TestScannerCursor.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../index.html?org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html" target="_top">Frames</a></li>
-<li><a href="TestScannerCursor.SparseFilter.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.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;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>


[02/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html
new file mode 100644
index 0000000..94cbbb0
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/AbstractTestScanCursor.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.Cell;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HConstants;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.TableName;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.regionserver.StoreScanner;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.AfterClass;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.BeforeClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>public abstract class AbstractTestScanCursor {<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * Table configuration<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  protected static TableName TABLE_NAME = TableName.valueOf("TestScanCursor");<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  protected static int NUM_ROWS = 5;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  protected static byte[] ROW = Bytes.toBytes("testRow");<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  protected static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  protected static int NUM_FAMILIES = 2;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  protected static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  protected static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  protected static int NUM_QUALIFIERS = 2;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  protected static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  protected static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  protected static int VALUE_SIZE = 10;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  protected static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected static final int TIMEOUT = 4000;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @BeforeClass<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static void setUpBeforeClass() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, TIMEOUT);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, TIMEOUT);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // Check the timeout condition after every cell<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    TEST_UTIL.startMiniCluster(1);<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>    createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private static void createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    TEST_UTIL.createTable(name, families).put(createPuts(rows, families, qualifiers, cellValue));<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>  private static List&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      byte[] value) throws IOException {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    List&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      Put put = new Put(rows[row]);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          put.add(kv);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      puts.add(put);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    return puts;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @AfterClass<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public static void tearDownAfterClass() throws Exception {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    TEST_UTIL.shutdownMiniCluster();<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>  public static final class SparseFilter extends FilterBase {<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>    private final boolean reversed;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public SparseFilter(boolean reversed) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      this.reversed = reversed;<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>    @Override<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      Threads.sleep(TIMEOUT / 2 + 100);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[reversed ? 0 : NUM_ROWS - 1])<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          ? ReturnCode.INCLUDE<a name="line.118"></a>
+<span class="sourceLineNo">119</span>          : ReturnCode.SKIP;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>    @Override<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public byte[] toByteArray() throws IOException {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      return reversed ? new byte[] { 1 } : new byte[] { 0 };<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    public static Filter parseFrom(final byte[] pbBytes) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      return new SparseFilter(pbBytes[0] != 0);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  protected Scan createScanWithSparseFilter() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return new Scan().setMaxResultSize(Long.MAX_VALUE).setCaching(Integer.MAX_VALUE)<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        .setNeedCursorResult(true).setAllowPartialResults(true).setFilter(new SparseFilter(false));<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>  protected Scan createReversedScanWithSparseFilter() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return new Scan().setMaxResultSize(Long.MAX_VALUE).setCaching(Integer.MAX_VALUE)<a name="line.138"></a>
+<span class="sourceLineNo">139</span>        .setReversed(true).setNeedCursorResult(true).setAllowPartialResults(true)<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        .setFilter(new SparseFilter(true));<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>  protected Scan createScanWithSizeLimit() {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    return new Scan().setMaxResultSize(1).setCaching(Integer.MAX_VALUE).setNeedCursorResult(true);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html
new file mode 100644
index 0000000..f178bf4
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestRawAsyncScanCursor.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<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.assertArrayEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertFalse;<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.concurrent.CompletableFuture;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.ExecutionException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.Test;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.junit.experimental.categories.Category;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>@Category({ MediumTests.class, ClientTests.class })<a name="line.33"></a>
+<span class="sourceLineNo">034</span>public class TestRawAsyncScanCursor extends AbstractTestScanCursor {<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>  private void doTest(boolean reversed)<a name="line.36"></a>
+<span class="sourceLineNo">037</span>      throws InterruptedException, ExecutionException, IOException {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    CompletableFuture&lt;Void&gt; future = new CompletableFuture&lt;&gt;();<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    try (AsyncConnection conn =<a name="line.39"></a>
+<span class="sourceLineNo">040</span>        ConnectionFactory.createAsyncConnection(TEST_UTIL.getConfiguration()).get()) {<a name="line.40"></a>
+<span class="sourceLineNo">041</span>      RawAsyncTable table = conn.getRawTable(TABLE_NAME);<a name="line.41"></a>
+<span class="sourceLineNo">042</span>      table.scan(reversed ? createReversedScanWithSparseFilter() : createScanWithSparseFilter(),<a name="line.42"></a>
+<span class="sourceLineNo">043</span>        new RawScanResultConsumer() {<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>          private int count;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>          @Override<a name="line.47"></a>
+<span class="sourceLineNo">048</span>          public void onHeartbeat(ScanController controller) {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>            int row = count / NUM_FAMILIES / NUM_QUALIFIERS;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>            if (reversed) {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>              row = NUM_ROWS - 1 - row;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>            }<a name="line.52"></a>
+<span class="sourceLineNo">053</span>            try {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>              assertArrayEquals(ROWS[row], controller.cursor().get().getRow());<a name="line.54"></a>
+<span class="sourceLineNo">055</span>              count++;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>            } catch (Throwable e) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>              future.completeExceptionally(e);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>              throw e;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>            }<a name="line.59"></a>
+<span class="sourceLineNo">060</span>          }<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>          @Override<a name="line.62"></a>
+<span class="sourceLineNo">063</span>          public void onNext(Result[] results, ScanController controller) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>            try {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>              assertEquals(1, results.length);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>              assertEquals(NUM_ROWS - 1, count / NUM_FAMILIES / NUM_QUALIFIERS);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>              // we will always provide a scan cursor if time limit is reached.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>              if (count == NUM_ROWS * NUM_FAMILIES * NUM_QUALIFIERS - 1) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>                assertFalse(controller.cursor().isPresent());<a name="line.69"></a>
+<span class="sourceLineNo">070</span>              } else {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>                assertArrayEquals(ROWS[reversed ? 0 : NUM_ROWS - 1],<a name="line.71"></a>
+<span class="sourceLineNo">072</span>                  controller.cursor().get().getRow());<a name="line.72"></a>
+<span class="sourceLineNo">073</span>              }<a name="line.73"></a>
+<span class="sourceLineNo">074</span>              assertArrayEquals(ROWS[reversed ? 0 : NUM_ROWS - 1], results[0].getRow());<a name="line.74"></a>
+<span class="sourceLineNo">075</span>              count++;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>            } catch (Throwable e) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>              future.completeExceptionally(e);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>              throw e;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>            }<a name="line.79"></a>
+<span class="sourceLineNo">080</span>          }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>          @Override<a name="line.82"></a>
+<span class="sourceLineNo">083</span>          public void onError(Throwable error) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>            future.completeExceptionally(error);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>          }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>          @Override<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          public void onComplete() {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>            future.complete(null);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>          }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        });<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      future.get();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  @Test<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void testHeartbeatWithSparseFilter()<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      throws IOException, InterruptedException, ExecutionException {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    doTest(false);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  @Test<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public void testHeartbeatWithSparseFilterReversed()<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      throws IOException, InterruptedException, ExecutionException {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    doTest(true);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>}<a name="line.107"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScanCursor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScanCursor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScanCursor.html
new file mode 100644
index 0000000..3da150f
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestScanCursor.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.junit.Assert;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.junit.Test;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.junit.experimental.categories.Category;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>@Category({ MediumTests.class, ClientTests.class })<a name="line.28"></a>
+<span class="sourceLineNo">029</span>public class TestScanCursor extends AbstractTestScanCursor {<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>  @Test<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  public void testHeartbeatWithSparseFilter() throws Exception {<a name="line.32"></a>
+<span class="sourceLineNo">033</span>    try (ResultScanner scanner =<a name="line.33"></a>
+<span class="sourceLineNo">034</span>        TEST_UTIL.getConnection().getTable(TABLE_NAME).getScanner(createScanWithSparseFilter())) {<a name="line.34"></a>
+<span class="sourceLineNo">035</span>      int num = 0;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>      Result r;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>      while ((r = scanner.next()) != null) {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>        if (num &lt; (NUM_ROWS - 1) * NUM_FAMILIES * NUM_QUALIFIERS) {<a name="line.38"></a>
+<span class="sourceLineNo">039</span>          Assert.assertTrue(r.isCursor());<a name="line.39"></a>
+<span class="sourceLineNo">040</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS],<a name="line.40"></a>
+<span class="sourceLineNo">041</span>            r.getCursor().getRow());<a name="line.41"></a>
+<span class="sourceLineNo">042</span>        } else {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>          Assert.assertFalse(r.isCursor());<a name="line.43"></a>
+<span class="sourceLineNo">044</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getRow());<a name="line.44"></a>
+<span class="sourceLineNo">045</span>        }<a name="line.45"></a>
+<span class="sourceLineNo">046</span>        num++;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>      }<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    }<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  @Test<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public void testHeartbeatWithSparseFilterReversed() throws Exception {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    try (ResultScanner scanner = TEST_UTIL.getConnection().getTable(TABLE_NAME)<a name="line.53"></a>
+<span class="sourceLineNo">054</span>        .getScanner(createReversedScanWithSparseFilter())) {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      int num = 0;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      Result r;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      while ((r = scanner.next()) != null) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>        if (num &lt; (NUM_ROWS - 1) * NUM_FAMILIES * NUM_QUALIFIERS) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>          Assert.assertTrue(r.isCursor());<a name="line.59"></a>
+<span class="sourceLineNo">060</span>          Assert.assertArrayEquals(ROWS[NUM_ROWS - 1 - num / NUM_FAMILIES / NUM_QUALIFIERS],<a name="line.60"></a>
+<span class="sourceLineNo">061</span>            r.getCursor().getRow());<a name="line.61"></a>
+<span class="sourceLineNo">062</span>        } else {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>          Assert.assertFalse(r.isCursor());<a name="line.63"></a>
+<span class="sourceLineNo">064</span>          Assert.assertArrayEquals(ROWS[0], r.getRow());<a name="line.64"></a>
+<span class="sourceLineNo">065</span>        }<a name="line.65"></a>
+<span class="sourceLineNo">066</span>        num++;<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>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Test<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public void testSizeLimit() throws IOException {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    try (ResultScanner scanner =<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        TEST_UTIL.getConnection().getTable(TABLE_NAME).getScanner(createScanWithSizeLimit())) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      int num = 0;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      Result r;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      while ((r = scanner.next()) != null) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>        if (num % (NUM_FAMILIES * NUM_QUALIFIERS) != (NUM_FAMILIES * NUM_QUALIFIERS) - 1) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>          Assert.assertTrue(r.isCursor());<a name="line.79"></a>
+<span class="sourceLineNo">080</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS],<a name="line.80"></a>
+<span class="sourceLineNo">081</span>            r.getCursor().getRow());<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        } else {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>          Assert.assertFalse(r.isCursor());<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getRow());<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        num++;<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>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>}<a name="line.90"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
index 781d09d..a2cc6a4 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/monitoring/TestTaskMonitor.html
@@ -30,109 +30,129 @@
 <span class="sourceLineNo">022</span><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><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.junit.Test;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.junit.experimental.categories.Category;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>@Category({MiscTests.class, SmallTests.class})<a name="line.30"></a>
-<span class="sourceLineNo">031</span>public class TestTaskMonitor {<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>  @Test<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  public void testTaskMonitorBasics() {<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    TaskMonitor tm = new TaskMonitor();<a name="line.35"></a>
-<span class="sourceLineNo">036</span>    assertTrue("Task monitor should start empty",<a name="line.36"></a>
-<span class="sourceLineNo">037</span>        tm.getTasks().isEmpty());<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    <a name="line.38"></a>
-<span class="sourceLineNo">039</span>    // Make a task and fetch it back out<a name="line.39"></a>
-<span class="sourceLineNo">040</span>    MonitoredTask task = tm.createStatus("Test task");<a name="line.40"></a>
-<span class="sourceLineNo">041</span>    MonitoredTask taskFromTm = tm.getTasks().get(0);<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    <a name="line.42"></a>
-<span class="sourceLineNo">043</span>    // Make sure the state is reasonable.<a name="line.43"></a>
-<span class="sourceLineNo">044</span>    assertEquals(task.getDescription(), taskFromTm.getDescription());<a name="line.44"></a>
-<span class="sourceLineNo">045</span>    assertEquals(-1, taskFromTm.getCompletionTimestamp());<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    assertEquals(MonitoredTask.State.RUNNING, taskFromTm.getState());<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    <a name="line.47"></a>
-<span class="sourceLineNo">048</span>    // Mark it as finished<a name="line.48"></a>
-<span class="sourceLineNo">049</span>    task.markComplete("Finished!");<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    assertEquals(MonitoredTask.State.COMPLETE, task.getState());<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    <a name="line.51"></a>
-<span class="sourceLineNo">052</span>    // It should still show up in the TaskMonitor list<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    assertEquals(1, tm.getTasks().size());<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    <a name="line.54"></a>
-<span class="sourceLineNo">055</span>    // If we mark its completion time back a few minutes, it should get gced<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    task.expireNow();<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    assertEquals(0, tm.getTasks().size());<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  <a name="line.59"></a>
-<span class="sourceLineNo">060</span>  @Test<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public void testTasksGetAbortedOnLeak() throws InterruptedException {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    final TaskMonitor tm = new TaskMonitor();<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    assertTrue("Task monitor should start empty",<a name="line.63"></a>
-<span class="sourceLineNo">064</span>        tm.getTasks().isEmpty());<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    <a name="line.65"></a>
-<span class="sourceLineNo">066</span>    final AtomicBoolean threadSuccess = new AtomicBoolean(false);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    // Make a task in some other thread and leak it<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    Thread t = new Thread() {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      @Override<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      public void run() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>        MonitoredTask task = tm.createStatus("Test task");    <a name="line.71"></a>
-<span class="sourceLineNo">072</span>        assertEquals(MonitoredTask.State.RUNNING, task.getState());<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        threadSuccess.set(true);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    };<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    t.start();<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    t.join();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    // Make sure the thread saw the correct state<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    assertTrue(threadSuccess.get());<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    <a name="line.80"></a>
-<span class="sourceLineNo">081</span>    // Make sure the leaked reference gets cleared<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    System.gc();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    System.gc();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    System.gc();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    <a name="line.85"></a>
-<span class="sourceLineNo">086</span>    // Now it should be aborted <a name="line.86"></a>
-<span class="sourceLineNo">087</span>    MonitoredTask taskFromTm = tm.getTasks().get(0);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    assertEquals(MonitoredTask.State.ABORTED, taskFromTm.getState());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  <a name="line.90"></a>
-<span class="sourceLineNo">091</span>  @Test<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public void testTaskLimit() throws Exception {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    TaskMonitor tm = new TaskMonitor();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    for (int i = 0; i &lt; TaskMonitor.MAX_TASKS + 10; i++) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>      tm.createStatus("task " + i);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    // Make sure it was limited correctly<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    assertEquals(TaskMonitor.MAX_TASKS, tm.getTasks().size());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // Make sure we culled the earlier tasks, not later<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    // (i.e. tasks 0 through 9 should have been deleted)<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    assertEquals("task 10", tm.getTasks().get(0).getDescription());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  @Test<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public void testDoNotPurgeRPCTask() throws Exception {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    int RPCTaskNums = 10;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    for(int i = 0; i &lt; RPCTaskNums; i++) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      TaskMonitor.get().createRPCStatus("PRCTask" + i);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    for(int i = 0; i &lt; TaskMonitor.MAX_TASKS; i++) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      TaskMonitor.get().createStatus("otherTask" + i);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    int remainRPCTask = 0;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    for(MonitoredTask task :TaskMonitor.get().getTasks()) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      if(task instanceof MonitoredRPCHandler) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        remainRPCTask++;<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>    assertEquals("RPC Tasks have been purged!", RPCTaskNums, remainRPCTask);<a name="line.119"></a>
-<span class="sourceLineNo">120</span><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><a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>}<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.junit.Test;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.experimental.categories.Category;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>@Category({MiscTests.class, SmallTests.class})<a name="line.32"></a>
+<span class="sourceLineNo">033</span>public class TestTaskMonitor {<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>  @Test<a name="line.35"></a>
+<span class="sourceLineNo">036</span>  public void testTaskMonitorBasics() {<a name="line.36"></a>
+<span class="sourceLineNo">037</span>    TaskMonitor tm = new TaskMonitor(new Configuration());<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    assertTrue("Task monitor should start empty",<a name="line.38"></a>
+<span class="sourceLineNo">039</span>        tm.getTasks().isEmpty());<a name="line.39"></a>
+<span class="sourceLineNo">040</span>    <a name="line.40"></a>
+<span class="sourceLineNo">041</span>    // Make a task and fetch it back out<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    MonitoredTask task = tm.createStatus("Test task");<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    MonitoredTask taskFromTm = tm.getTasks().get(0);<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    <a name="line.44"></a>
+<span class="sourceLineNo">045</span>    // Make sure the state is reasonable.<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    assertEquals(task.getDescription(), taskFromTm.getDescription());<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    assertEquals(-1, taskFromTm.getCompletionTimestamp());<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    assertEquals(MonitoredTask.State.RUNNING, taskFromTm.getState());<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    <a name="line.49"></a>
+<span class="sourceLineNo">050</span>    // Mark it as finished<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    task.markComplete("Finished!");<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    assertEquals(MonitoredTask.State.COMPLETE, task.getState());<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    <a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // It should still show up in the TaskMonitor list<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    assertEquals(1, tm.getTasks().size());<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    <a name="line.56"></a>
+<span class="sourceLineNo">057</span>    // If we mark its completion time back a few minutes, it should get gced<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    task.expireNow();<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    assertEquals(0, tm.getTasks().size());<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>    tm.shutdown();<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  }<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  <a name="line.63"></a>
+<span class="sourceLineNo">064</span>  @Test<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public void testTasksGetAbortedOnLeak() throws InterruptedException {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    final TaskMonitor tm = new TaskMonitor(new Configuration());<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    assertTrue("Task monitor should start empty",<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        tm.getTasks().isEmpty());<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    <a name="line.69"></a>
+<span class="sourceLineNo">070</span>    final AtomicBoolean threadSuccess = new AtomicBoolean(false);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    // Make a task in some other thread and leak it<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    Thread t = new Thread() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      @Override<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      public void run() {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        MonitoredTask task = tm.createStatus("Test task");    <a name="line.75"></a>
+<span class="sourceLineNo">076</span>        assertEquals(MonitoredTask.State.RUNNING, task.getState());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>        threadSuccess.set(true);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    };<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    t.start();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    t.join();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    // Make sure the thread saw the correct state<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    assertTrue(threadSuccess.get());<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    <a name="line.84"></a>
+<span class="sourceLineNo">085</span>    // Make sure the leaked reference gets cleared<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    System.gc();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    System.gc();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    System.gc();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    <a name="line.89"></a>
+<span class="sourceLineNo">090</span>    // Now it should be aborted <a name="line.90"></a>
+<span class="sourceLineNo">091</span>    MonitoredTask taskFromTm = tm.getTasks().get(0);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    assertEquals(MonitoredTask.State.ABORTED, taskFromTm.getState());<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>    tm.shutdown();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  <a name="line.96"></a>
+<span class="sourceLineNo">097</span>  @Test<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public void testTaskLimit() throws Exception {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    TaskMonitor tm = new TaskMonitor(new Configuration());<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    for (int i = 0; i &lt; TaskMonitor.DEFAULT_MAX_TASKS + 10; i++) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      tm.createStatus("task " + i);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // Make sure it was limited correctly<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assertEquals(TaskMonitor.DEFAULT_MAX_TASKS, tm.getTasks().size());<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    // Make sure we culled the earlier tasks, not later<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // (i.e. tasks 0 through 9 should have been deleted)<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    assertEquals("task 10", tm.getTasks().get(0).getDescription());<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    tm.shutdown();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  @Test<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public void testDoNotPurgeRPCTask() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    int RPCTaskNums = 10;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    TaskMonitor tm = TaskMonitor.get();<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    for(int i = 0; i &lt; RPCTaskNums; i++) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      tm.createRPCStatus("PRCTask" + i);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    for(int i = 0; i &lt; TaskMonitor.DEFAULT_MAX_TASKS; i++) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      tm.createStatus("otherTask" + i);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    int remainRPCTask = 0;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    for(MonitoredTask task: tm.getTasks()) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      if(task instanceof MonitoredRPCHandler) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        remainRPCTask++;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    assertEquals("RPC Tasks have been purged!", RPCTaskNums, remainRPCTask);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    tm.shutdown();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  @Test<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public void testWarnStuckTasks() throws Exception {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    final int INTERVAL = 1000;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    Configuration conf = new Configuration();<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    conf.setLong(TaskMonitor.RPC_WARN_TIME_KEY, INTERVAL);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    conf.setLong(TaskMonitor.MONITOR_INTERVAL_KEY, INTERVAL);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    final TaskMonitor tm = new TaskMonitor(conf);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    MonitoredRPCHandler t = tm.createRPCStatus("test task");<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    long then = EnvironmentEdgeManager.currentTime();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    t.setRPC("testMethod", new Object[0], then);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Thread.sleep(INTERVAL * 2);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    assertTrue("We did not warn", t.getWarnTime() &gt; then);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    tm.shutdown();<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><a name="line.147"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html
deleted file mode 100644
index c8f1443..0000000
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestScannerCursor.SparseFilter.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.regionserver;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.commons.logging.Log;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.commons.logging.LogFactory;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Cell;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HTestConst;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.Put;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.Result;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Table;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.filter.FilterBase;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.junit.AfterClass;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.junit.Assert;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.junit.BeforeClass;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.junit.Test;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.experimental.categories.Category;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>@Category(MediumTests.class)<a name="line.50"></a>
-<span class="sourceLineNo">051</span>public class TestScannerCursor {<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final Log LOG =<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      LogFactory.getLog(TestScannerCursor.class);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static Table TABLE = null;<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * Table configuration<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private static TableName TABLE_NAME = TableName.valueOf("TestScannerCursor");<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private static int NUM_ROWS = 5;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private static byte[] ROW = Bytes.toBytes("testRow");<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static byte[][] ROWS = HTestConst.makeNAscii(ROW, NUM_ROWS);<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private static int NUM_FAMILIES = 2;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private static byte[][] FAMILIES = HTestConst.makeNAscii(FAMILY, NUM_FAMILIES);<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static int NUM_QUALIFIERS = 2;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static byte[] QUALIFIER = Bytes.toBytes("testQualifier");<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, NUM_QUALIFIERS);<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static int VALUE_SIZE = 10;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static byte[] VALUE = Bytes.createMaxByteArray(VALUE_SIZE);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private static final int TIMEOUT = 4000;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  @BeforeClass<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public static void setUpBeforeClass() throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>    conf.setInt(HConstants.HBASE_CLIENT_SCANNER_TIMEOUT_PERIOD, TIMEOUT);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, TIMEOUT);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // Check the timeout condition after every cell<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    conf.setLong(StoreScanner.HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK, 1);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    TEST_UTIL.startMiniCluster(1);<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>    TABLE = createTestTable(TABLE_NAME, ROWS, FAMILIES, QUALIFIERS, VALUE);<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  static Table createTestTable(TableName name, byte[][] rows, byte[][] families,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      byte[][] qualifiers, byte[] cellValue) throws IOException {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    Table ht = TEST_UTIL.createTable(name, families);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    List&lt;Put&gt; puts = createPuts(rows, families, qualifiers, cellValue);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    ht.put(puts);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    return ht;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  static ArrayList&lt;Put&gt; createPuts(byte[][] rows, byte[][] families, byte[][] qualifiers,<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      byte[] value) throws IOException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    Put put;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    ArrayList&lt;Put&gt; puts = new ArrayList&lt;&gt;();<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    for (int row = 0; row &lt; rows.length; row++) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      put = new Put(rows[row]);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      for (int fam = 0; fam &lt; families.length; fam++) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        for (int qual = 0; qual &lt; qualifiers.length; qual++) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>          KeyValue kv = new KeyValue(rows[row], families[fam], qualifiers[qual], qual, value);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          put.add(kv);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      puts.add(put);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    return puts;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  @AfterClass<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public static void tearDownAfterClass() throws Exception {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public static class SparseFilter extends FilterBase {<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public ReturnCode filterKeyValue(Cell v) throws IOException {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      Threads.sleep(TIMEOUT / 2 + 100);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      return Bytes.equals(CellUtil.cloneRow(v), ROWS[NUM_ROWS - 1]) ? ReturnCode.INCLUDE<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          : ReturnCode.SKIP;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    public static Filter parseFrom(final byte[] pbBytes) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return new SparseFilter();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<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<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  public void testHeartbeatWithSparseFilter() throws Exception {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    Scan scan = new Scan();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    scan.setMaxResultSize(Long.MAX_VALUE);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    scan.setNeedCursorResult(true);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    scan.setAllowPartialResults(true);<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    scan.setFilter(new SparseFilter());<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    try(ResultScanner scanner = TABLE.getScanner(scan)) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      int num = 0;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      Result r;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      while ((r = scanner.next()) != null) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>        if (num &lt; (NUM_ROWS - 1) * NUM_FAMILIES * NUM_QUALIFIERS) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>          Assert.assertTrue(r.isCursor());<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getCursor().getRow());<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        } else {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>          Assert.assertFalse(r.isCursor());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getRow());<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        num++;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  @Test<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  public void testSizeLimit() throws IOException {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Scan scan = new Scan();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    scan.setMaxResultSize(1);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    scan.setCaching(Integer.MAX_VALUE);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    scan.setNeedCursorResult(true);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    try (ResultScanner scanner = TABLE.getScanner(scan)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      int num = 0;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      Result r;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      while ((r = scanner.next()) != null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>        if (num % (NUM_FAMILIES * NUM_QUALIFIERS) != (NUM_FAMILIES * NUM_QUALIFIERS)-1) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          Assert.assertTrue(r.isCursor());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getCursor().getRow());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        } else {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          Assert.assertFalse(r.isCursor());<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          Assert.assertArrayEquals(ROWS[num / NUM_FAMILIES / NUM_QUALIFIERS], r.getRow());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        num++;<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>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[32/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
index c21aec6..0362d7f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html
@@ -61,516 +61,530 @@
 <span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.exceptions.ScannerResetException;<a name="line.53"></a>
 <span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ipc.HBaseRpcController;<a name="line.54"></a>
 <span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Retry caller for scanning a region.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * &lt;p&gt;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * reference of this object and use it to open new single region scanners.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final HashedWheelTimer retryTimer;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private final Scan scan;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private final ScanMetrics scanMetrics;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final long scannerId;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final ScanResultCache resultCache;<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final RawScanResultConsumer consumer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private final ClientService.Interface stub;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private final HRegionLocation loc;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private final boolean regionServerRemote;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private final long pauseNs;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private final int maxAttempts;<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private final long scanTimeoutNs;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final long rpcTimeoutNs;<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private final int startLogErrorsCnt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  private final HBaseRpcController controller;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private byte[] nextStartRowWhenError;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private boolean includeNextStartRowWhenError;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  private long nextCallStartNs;<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private int tries;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private long nextCallSeq = -1L;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private enum ScanControllerState {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // usage. We use two things to prevent invalid usage:<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  // to be used in the future.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  // package private methods can only be called within the implementation of<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Make sure the methods are only called in this thread.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private final Thread callerThread = Thread.currentThread();<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // INITIALIZED -&gt; DESTROYED<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private ScanResumerImpl resumer;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    private void preCheck() {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        "The current thread is %s, expected thread is %s, " +<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        Thread.currentThread(), callerThread);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        "Invalid Stopper state %s", state);<a name="line.163"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ClientService.Interface;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanRequest;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.ScanResponse;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Retry caller for scanning a region.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * We will modify the {@link Scan} object passed in directly. The upper layer should store the<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * reference of this object and use it to open new single region scanners.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>@InterfaceAudience.Private<a name="line.71"></a>
+<span class="sourceLineNo">072</span>class AsyncScanSingleRegionRpcRetryingCaller {<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Log LOG = LogFactory.getLog(AsyncScanSingleRegionRpcRetryingCaller.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private final HashedWheelTimer retryTimer;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final Scan scan;<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private final ScanMetrics scanMetrics;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final long scannerId;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final ScanResultCache resultCache;<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final RawScanResultConsumer consumer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final ClientService.Interface stub;<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private final HRegionLocation loc;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private final boolean regionServerRemote;<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private final long scannerLeaseTimeoutPeriodNs;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private final long pauseNs;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private final int maxAttempts;<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private final long scanTimeoutNs;<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private final long rpcTimeoutNs;<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private final int startLogErrorsCnt;<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private final Runnable completeWhenNoMoreResultsInRegion;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private final CompletableFuture&lt;Boolean&gt; future;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private final HBaseRpcController controller;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  private byte[] nextStartRowWhenError;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private boolean includeNextStartRowWhenError;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private long nextCallStartNs;<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private int tries;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final List&lt;RetriesExhaustedException.ThrowableWithExtraContext&gt; exceptions;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long nextCallSeq = -1L;<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private enum ScanControllerState {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    INITIALIZED, SUSPENDED, TERMINATED, DESTROYED<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  // Since suspend and terminate should only be called within onNext or onHeartbeat(see the comments<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  // of RawScanResultConsumer.onNext and onHeartbeat), we need to add some check to prevent invalid<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  // usage. We use two things to prevent invalid usage:<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  // 1. Record the thread that construct the ScanControllerImpl instance. We will throw an<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  // IllegalStateException if the caller thread is not this thread.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  // 2. The ControllerState. The initial state is INITIALIZED, if you call suspend, the state will<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  // be transformed to SUSPENDED, and if you call terminate, the state will be transformed to<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  // TERMINATED. And when we are back from onNext or onHeartbeat in the onComplete method, we will<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  // call destroy to get the current state and set the state to DESTROYED. And when user calls<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  // suspend or terminate, we will check if the current state is INITIALIZED, if not we will throw<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  // an IllegalStateException. Notice that the DESTROYED state is necessary as you may not call<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  // suspend or terminate so the state will still be INITIALIZED when back from onNext or<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  // onHeartbeat. We need another state to replace the INITIALIZED state to prevent the controller<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // to be used in the future.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  // package private methods can only be called within the implementation of<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  private final class ScanControllerImpl implements RawScanResultConsumer.ScanController {<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // Make sure the methods are only called in this thread.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    private final Thread callerThread;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private final Optional&lt;Cursor&gt; cursor;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    // INITIALIZED -&gt; SUSPENDED -&gt; DESTROYED<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // INITIALIZED -&gt; TERMINATED -&gt; DESTROYED<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // INITIALIZED -&gt; DESTROYED<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // If the state is incorrect we will throw IllegalStateException.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private ScanControllerState state = ScanControllerState.INITIALIZED;<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private ScanResumerImpl resumer;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>    public ScanControllerImpl(ScanResponse resp) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      callerThread = Thread.currentThread();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      cursor = resp.hasCursor() ? Optional.of(ProtobufUtil.toCursor(resp.getCursor()))<a name="line.162"></a>
+<span class="sourceLineNo">163</span>          : Optional.empty();<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    }<a name="line.164"></a>
 <span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    public ScanResumer suspend() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      preCheck();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      state = ScanControllerState.SUSPENDED;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      this.resumer = resumer;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      return resumer;<a name="line.172"></a>
+<span class="sourceLineNo">166</span>    private void preCheck() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      Preconditions.checkState(Thread.currentThread() == callerThread,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        "The current thread is %s, expected thread is %s, " +<a name="line.168"></a>
+<span class="sourceLineNo">169</span>            "you should not call this method outside onNext or onHeartbeat",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        Thread.currentThread(), callerThread);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      Preconditions.checkState(state.equals(ScanControllerState.INITIALIZED),<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        "Invalid Stopper state %s", state);<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>    @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public void terminate() {<a name="line.176"></a>
+<span class="sourceLineNo">176</span>    public ScanResumer suspend() {<a name="line.176"></a>
 <span class="sourceLineNo">177</span>      preCheck();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      state = ScanControllerState.TERMINATED;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // return the current state, and set the state to DESTROYED.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    ScanControllerState destroy() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      ScanControllerState state = this.state;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      this.state = ScanControllerState.DESTROYED;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      return state;<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>  private enum ScanResumerState {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  // controller.suspend().resume()<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  // package private methods can only be called within the implementation of<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // INITIALIZED -&gt; RESUMED<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private ScanResponse resp;<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int numberOfCompleteRows;<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // renewal task.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private Timeout leaseRenewer;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public void resume() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      ScanResponse localResp;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      int localNumberOfCompleteRows;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      synchronized (this) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          // user calls this method before we call prepare, so just set the state to<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          // RESUMED, the implementation will just go on.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          state = ScanResumerState.RESUMED;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          return;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        if (state == ScanResumerState.RESUMED) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          // already resumed, give up.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          return;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        state = ScanResumerState.RESUMED;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        if (leaseRenewer != null) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          leaseRenewer.cancel();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        localResp = this.resp;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      completeOrNext(localResp, localNumberOfCompleteRows);<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>    private void scheduleRenewLeaseTask() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      // the scan has already been resumed, give up<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (state == ScanResumerState.RESUMED) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        return;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      renewLease();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      scheduleRenewLeaseTask();<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>    // return false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // for more details.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      if (state == ScanResumerState.RESUMED) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return false;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      state = ScanResumerState.SUSPENDED;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.resp = resp;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // automatically so we do not need to renew lease.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      if (resp.getMoreResultsInRegion()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        // schedule renew lease task<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        scheduleRenewLeaseTask();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      return true;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.retryTimer = retryTimer;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    this.scan = scan;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    this.scanMetrics = scanMetrics;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    this.scannerId = scannerId;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.resultCache = resultCache;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    this.consumer = consumer;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    this.stub = stub;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    this.loc = loc;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.pauseNs = pauseNs;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    this.maxAttempts = maxAttempts;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    if (scan.isReversed()) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    } else {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this.exceptions = new ArrayList&lt;&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  private long elapsedMs() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<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 long remainingTimeNs() {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void closeScanner() {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    resetController(controller, rpcTimeoutNs);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    stub.scan(controller, req, resp -&gt; {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      if (controller.failed()) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.332"></a>
-<span class="sourceLineNo">333</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          controller.getFailed());<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">178</span>      state = ScanControllerState.SUSPENDED;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ScanResumerImpl resumer = new ScanResumerImpl();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      this.resumer = resumer;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return resumer;<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>    @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    public void terminate() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      preCheck();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      state = ScanControllerState.TERMINATED;<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>    // return the current state, and set the state to DESTROYED.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    ScanControllerState destroy() {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      ScanControllerState state = this.state;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      this.state = ScanControllerState.DESTROYED;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      return state;<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>    public Optional&lt;Cursor&gt; cursor() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return cursor;<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>  private enum ScanResumerState {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    INITIALIZED, SUSPENDED, RESUMED<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>  // The resume method is allowed to be called in another thread so here we also use the<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  // ResumerState to prevent race. The initial state is INITIALIZED, and in most cases, when back<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  // from onNext or onHeartbeat, we will call the prepare method to change the state to SUSPENDED,<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  // and when user calls resume method, we will change the state to RESUMED. But the resume method<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  // could be called in other thread, and in fact, user could just do this:<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  // controller.suspend().resume()<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  // This is strange but valid. This means the scan could be resumed before we call the prepare<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  // method to do the actual suspend work. So in the resume method, we will check if the state is<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  // INTIALIZED, if it is, then we will just set the state to RESUMED and return. And in prepare<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  // method, if the state is RESUMED already, we will just return an let the scan go on.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  // Notice that, the public methods of this class is supposed to be called by upper layer only, and<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  // package private methods can only be called within the implementation of<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  // AsyncScanSingleRegionRpcRetryingCaller.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private final class ScanResumerImpl implements RawScanResultConsumer.ScanResumer {<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // INITIALIZED -&gt; SUSPENDED -&gt; RESUMED<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // INITIALIZED -&gt; RESUMED<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private ScanResumerState state = ScanResumerState.INITIALIZED;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private ScanResponse resp;<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private int numberOfCompleteRows;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // If the scan is suspended successfully, we need to do lease renewal to prevent it being closed<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    // by RS due to lease expire. It is a one-time timer task so we need to schedule a new task<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // every time when the previous task is finished. There could also be race as the renewal is<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    // executed in the timer thread, so we also need to check the state before lease renewal. If the<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    // state is RESUMED already, we will give up lease renewal and also not schedule the next lease<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // renewal task.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private Timeout leaseRenewer;<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    @Override<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    public void resume() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // just used to fix findbugs warnings. In fact, if resume is called before prepare, then we<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // just return at the first if condition without loading the resp and numValidResuls field. If<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // resume is called after suspend, then it is also safe to just reference resp and<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // numValidResults after the synchronized block as no one will change it anymore.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      ScanResponse localResp;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      int localNumberOfCompleteRows;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      synchronized (this) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        if (state == ScanResumerState.INITIALIZED) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          // user calls this method before we call prepare, so just set the state to<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          // RESUMED, the implementation will just go on.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          state = ScanResumerState.RESUMED;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          return;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (state == ScanResumerState.RESUMED) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // already resumed, give up.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          return;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        state = ScanResumerState.RESUMED;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (leaseRenewer != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          leaseRenewer.cancel();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        localResp = this.resp;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        localNumberOfCompleteRows = this.numberOfCompleteRows;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      completeOrNext(localResp, localNumberOfCompleteRows);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>    private void scheduleRenewLeaseTask() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      leaseRenewer = retryTimer.newTimeout(t -&gt; tryRenewLease(), scannerLeaseTimeoutPeriodNs / 2,<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        TimeUnit.NANOSECONDS);<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>    private synchronized void tryRenewLease() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      // the scan has already been resumed, give up<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      if (state == ScanResumerState.RESUMED) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        return;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      renewLease();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      // schedule the next renew lease task again as this is a one-time task.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      scheduleRenewLeaseTask();<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 false if the scan has already been resumed. See the comment above for ScanResumerImpl<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    // for more details.<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    synchronized boolean prepare(ScanResponse resp, int numberOfCompleteRows) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      if (state == ScanResumerState.RESUMED) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        // user calls resume before we actually suspend the scan, just continue;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        return false;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      state = ScanResumerState.SUSPENDED;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.resp = resp;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.numberOfCompleteRows = numberOfCompleteRows;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // if there are no more results in region then the scanner at RS side will be closed<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // automatically so we do not need to renew lease.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      if (resp.getMoreResultsInRegion()) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        // schedule renew lease task<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        scheduleRenewLeaseTask();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      }<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><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public AsyncScanSingleRegionRpcRetryingCaller(HashedWheelTimer retryTimer,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      AsyncConnectionImpl conn, Scan scan, ScanMetrics scanMetrics, long scannerId,<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      ScanResultCache resultCache, RawScanResultConsumer consumer, Interface stub,<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      HRegionLocation loc, boolean isRegionServerRemote, long scannerLeaseTimeoutPeriodNs,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      long pauseNs, int maxAttempts, long scanTimeoutNs, long rpcTimeoutNs, int startLogErrorsCnt) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    this.retryTimer = retryTimer;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    this.scan = scan;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.scanMetrics = scanMetrics;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    this.scannerId = scannerId;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    this.resultCache = resultCache;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    this.consumer = consumer;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    this.stub = stub;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    this.loc = loc;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    this.regionServerRemote = isRegionServerRemote;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this.scannerLeaseTimeoutPeriodNs = scannerLeaseTimeoutPeriodNs;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    this.pauseNs = pauseNs;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    this.maxAttempts = maxAttempts;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    this.scanTimeoutNs = scanTimeoutNs;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    this.rpcTimeoutNs = rpcTimeoutNs;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    this.startLogErrorsCnt = startLogErrorsCnt;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (scan.isReversed()) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      completeWhenNoMoreResultsInRegion = this::completeReversedWhenNoMoreResultsInRegion;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    } else {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      completeWhenNoMoreResultsInRegion = this::completeWhenNoMoreResultsInRegion;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    this.future = new CompletableFuture&lt;&gt;();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    this.controller = conn.rpcControllerFactory.newController();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    this.exceptions = new ArrayList&lt;&gt;();<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>  private long elapsedMs() {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nextCallStartNs);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private long remainingTimeNs() {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<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>  private void completeExceptionally(boolean closeScanner) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    resultCache.clear();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (closeScanner) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      closeScanner();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    future.complete(false);<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 void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    scan.withStartRow(row, inclusive);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    future.complete(true);<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>  private void completeWhenError(boolean closeScanner) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    resultCache.clear();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    if (closeScanner) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      closeScanner();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (nextStartRowWhenError != null) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    future.complete(true);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private void onError(Throwable error) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    error = translateException(error);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          " ms",<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        error);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    exceptions.add(qt);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (tries &gt;= maxAttempts) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      completeExceptionally(!scannerClosed);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long delayNs;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    if (scanTimeoutNs &gt; 0) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      if (maxDelayNs &lt;= 0) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        completeExceptionally(!scannerClosed);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        return;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      }<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    } else {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (scannerClosed) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      completeWhenError(false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      completeWhenError(true);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      return;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    }<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    if (error instanceof DoNotRetryIOException) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      completeExceptionally(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    tries++;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<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 void updateNextStartRowWhenError(Result result) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    nextStartRowWhenError = result.getRow();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    includeNextStartRowWhenError = result.mayHaveMoreCellsInRow();<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>  private void completeWhenNoMoreResultsInRegion() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    if (noMoreResultsForScan(scan, loc.getRegionInfo())) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      completeNoMoreResults();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    } else {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      completeWithNextStartRow(loc.getRegionInfo().getEndKey(), true);<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>  private void completeReversedWhenNoMoreResultsInRegion() {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (noMoreResultsForReverseScan(scan, loc.getRegionInfo())) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      completeNoMoreResults();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      completeWithNextStartRow(loc.getRegionInfo().getStartKey(), false);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private void completeOrNext(ScanResponse resp, int numberOfCompleteRows) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    if (resp.hasMoreResults() &amp;&amp; !resp.getMoreResults()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      // RS tells us there is no more data for the whole scan<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      completeNoMoreResults();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      return;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (scan.getLimit() &gt; 0) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // The RS should have set the moreResults field in ScanResponse to false when we have reached<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // the limit, so we add an assert here.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      int newLimit = scan.getLimit() - numberOfCompleteRows;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      assert newLimit &gt; 0;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      scan.setLimit(newLimit);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    }<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // as in 2.0 this value will always be set<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (!resp.getMoreResultsInRegion()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      completeWhenNoMoreResultsInRegion.run();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    next();<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>  private void onComplete(HBaseRpcController controller, ScanResponse resp) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (controller.failed()) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      onError(controller.getFailed());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      return;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    updateServerSideMetrics(scanMetrics, resp);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    boolean isHeartbeatMessage = resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Result[] results;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    int numberOfCompleteRowsBefore = resultCache.numberOfCompleteRows();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    try {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      Result[] rawResults = ResponseConverter.getResults(controller.cellScanner(), resp);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      updateResultsMetrics(scanMetrics, rawResults, isHeartbeatMessage);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      results = resultCache.addAndGet(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        Optional.ofNullable(rawResults).orElse(ScanResultCache.EMPTY_RESULT_ARRAY),<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        isHeartbeatMessage);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } catch (IOException e) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // We can not retry here. The server has responded normally and the call sequence has been<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // increased so a new scan with the same call sequence will cause an<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // OutOfOrderScannerNextException. Let the upper layer open a new scanner.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      LOG.warn("decode scan response failed", e);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      completeWhenError(true);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ScanControllerImpl scanController = new ScanControllerImpl();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    if (results.length &gt; 0) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      updateNextStartRowWhenError(results[results.length - 1]);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      consumer.onNext(results, scanController);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    } else if (resp.hasHeartbeatMessage() &amp;&amp; resp.getHeartbeatMessage()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      consumer.onHeartbeat(scanController);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    ScanControllerState state = scanController.destroy();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (state == ScanControllerState.TERMINATED) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      if (resp.getMoreResultsInRegion()) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        // we have more results in region but user request to stop the scan, so we need to close the<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // scanner explicitly.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        closeScanner();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      completeNoMoreResults();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      return;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    int numberOfCompleteRows = resultCache.numberOfCompleteRows() - numberOfCompleteRowsBefore;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    if (state == ScanControllerState.SUSPENDED) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      if (scanController.resumer.prepare(resp, numberOfCompleteRows)) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        return;<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>    completeOrNext(resp, numberOfCompleteRows);<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>  private void call() {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // As we have a call sequence for scan, it is useless to have a different rpc timeout which is<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    // less than the scan timeout. If the server does not respond in time(usually this will not<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    // happen as we have heartbeat now), we will get an OutOfOrderScannerNextException when<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // resending the next request and the only way to fix this is to close the scanner and open a<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // new one.<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    long callTimeoutNs;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    if (scanTimeoutNs &gt; 0) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      long remainingNs = scanTimeoutNs - (System.nanoTime() - nextCallStartNs);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      if (remainingNs &lt;= 0) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        completeExceptionally(true);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        return;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      callTimeoutNs = remainingNs;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    } else {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      callTimeoutNs = 0L;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    if (tries &gt; 1) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      incRPCRetriesMetrics(scanMetrics, regionServerRemote);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    resetController(controller, callTimeoutNs);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    ScanRequest req = RequestConverter.buildScanRequest(scannerId, scan.getCaching(), false,<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      nextCallSeq, false, false, scan.getLimit());<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    stub.scan(controller, req, resp -&gt; onComplete(controller, resp));<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>  private void next() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    nextCallSeq++;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    tries = 1;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    exceptions.clear();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    nextCallStartNs = System.nanoTime();<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    call();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>  private void renewLease() {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    nextCallSeq++;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    resetController(controller, rpcTimeoutNs);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    ScanRequest req =<a name="line.547"></a>
-<span class="sourceLineNo">548</span>        RequestConverter.buildScanRequest(scannerId, 0, false, nextCallSeq, false, true, -1);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    stub.scan(controller, req, resp -&gt; {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    });<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /**<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Now we will also fetch some cells along with the scanner id when opening a scanner, so we also<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   * need to process the ScanResponse for the open scanner request. The HBaseRpcController for the<a name="line.555"></a>
-<span class="sourceLineNo">556</span>   * open scanner request is also needed because we may have some data in the CellScanner which is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>   * contained in the controller.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>   * @return {@code true} if we should continue, otherwise {@code false}.<a name="line.558"></a>
-<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public CompletableFuture&lt;Boolean&gt; start(HBaseRpcController controller,<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      ScanResponse respWhenOpen) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    onComplete(controller, respWhenOpen);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    return future;<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">340</span>  private void closeScanner() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    incRPCCallsMetrics(scanMetrics, regionServerRemote);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    resetController(controller, rpcTimeoutNs);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    ScanRequest req = RequestConverter.buildScanRequest(this.scannerId, 0, true, false);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    stub.scan(controller, req, resp -&gt; {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (controller.failed()) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        LOG.warn("Call to " + loc.getServerName() + " for closing scanner id = " + scannerId +<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            " for " + loc.getRegionInfo().getEncodedName() + " of " +<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            loc.getRegionInfo().getTable() + " failed, ignore, probably already closed",<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          controller.getFailed());<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>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  private void completeExceptionally(boolean closeScanner) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    resultCache.clear();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (closeScanner) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      closeScanner();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    future.completeExceptionally(new RetriesExhaustedException(tries - 1, exceptions));<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>  private void completeNoMoreResults() {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    future.complete(false);<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>  private void completeWithNextStartRow(byte[] row, boolean inclusive) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    scan.withStartRow(row, inclusive);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    future.complete(true);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private void completeWhenError(boolean closeScanner) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    incRPCRetriesMetrics(scanMetrics, closeScanner);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    resultCache.clear();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (closeScanner) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      closeScanner();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    if (nextStartRowWhenError != null) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      scan.withStartRow(nextStartRowWhenError, includeNextStartRowWhenError);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    future.complete(true);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private void onError(Throwable error) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    error = translateException(error);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    if (tries &gt; startLogErrorsCnt) {<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      LOG.warn("Call to " + loc.getServerName() + " for scanner id = " + scannerId + " for " +<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          loc.getRegionInfo().getEncodedName() + " of " + loc.getRegionInfo().getTable() +<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          " failed, , tries = " + tries + ", maxAttempts = " + maxAttempts + ", timeout = " +<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          TimeUnit.NANOSECONDS.toMillis(scanTimeoutNs) + " ms, time elapsed = " + elapsedMs() +<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          " ms",<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        error);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    boolean scannerClosed = error instanceof UnknownScannerException ||<a name="line.393"></a>
+<span class="sourceLineNo">394</span>        error instanceof NotServingRegionException || error instanceof RegionServerStoppedException;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    RetriesExhaustedException.ThrowableWithExtraContext qt =<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        new RetriesExhaustedException.ThrowableWithExtraContext(error,<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            EnvironmentEdgeManager.currentTime(), "");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    exceptions.add(qt);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    if (tries &gt;= maxAttempts) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      completeExceptionally(!scannerClosed);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      return;<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    long delayNs;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    if (scanTimeoutNs &gt; 0) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      long maxDelayNs = remainingTimeNs() - SLEEP_DELTA_NS;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (maxDelayNs &lt;= 0) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        completeExceptionally(!scannerClosed);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        return;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      delayNs = Math.min(maxDelayNs, getPauseTime(pauseNs, tries - 1));<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    } else {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      delayNs = getPauseTime(pauseNs, tries - 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (scannerClosed) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      completeWhenError(false);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return;<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    if (error instanceof OutOfOrderScannerNextException || error instanceof ScannerResetException) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      completeWhenError(true);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      return;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    if (error instanceof DoNotRetryIOException) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      completeExceptionally(true);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      return;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    tries++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    retryTimer.newTimeout(t -&gt; call(), delayNs, TimeUnit.NANOSECONDS);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private void updateNextStartRowWhenError(Result result) {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    nextStartRowWhenError = result.getRow();<a name="line.431"><

<TRUNCATED>

[40/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
index a4fc195..3a93895 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -182,6 +182,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#statusTime">statusTime</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#warnTime">warnTime</a></span></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -268,43 +272,51 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getStatusTime--">getStatusTime</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i11" class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getWarnTime--">getWarnTime</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#markComplete-java.lang.String-">markComplete</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#pause-java.lang.String-">pause</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#resume-java.lang.String-">resume</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setDescription-java.lang.String-">setDescription</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setState-org.apache.hadoop.hbase.monitoring.MonitoredTask.State-">setState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring">MonitoredTask.State</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setStatus-java.lang.String-">setStatus</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setWarnTime-long-">setWarnTime</a></span>(long&nbsp;t)</code>&nbsp;</td>
+</tr>
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#toJSON--">toJSON</a></span>()</code>
 <div class="block">Creates a JSON object for parseable exposure of monitored tasks.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#toMap--">toMap</a></span>()</code>
 <div class="block">Creates a string map of internal details for extensible exposure of 
  monitored tasks.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
@@ -357,13 +369,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.32">stateTime</a></pre>
 </li>
 </ul>
+<a name="warnTime">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>warnTime</h4>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.33">warnTime</a></pre>
+</li>
+</ul>
 <a name="status">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>status</h4>
-<pre>private volatile&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.34">status</a></pre>
+<pre>private volatile&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.35">status</a></pre>
 </li>
 </ul>
 <a name="description">
@@ -372,7 +393,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>description</h4>
-<pre>private volatile&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.35">description</a></pre>
+<pre>private volatile&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.36">description</a></pre>
 </li>
 </ul>
 <a name="state">
@@ -381,7 +402,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>state</h4>
-<pre>protected volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring">MonitoredTask.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.37">state</a></pre>
+<pre>protected volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring">MonitoredTask.State</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.38">state</a></pre>
 </li>
 </ul>
 <a name="MAPPER">
@@ -390,7 +411,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MAPPER</h4>
-<pre>private static final&nbsp;org.codehaus.jackson.map.ObjectMapper <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.39">MAPPER</a></pre>
+<pre>private static final&nbsp;org.codehaus.jackson.map.ObjectMapper <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.40">MAPPER</a></pre>
 </li>
 </ul>
 </li>
@@ -407,7 +428,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MonitoredTaskImpl</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.41">MonitoredTaskImpl</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.42">MonitoredTaskImpl</a>()</pre>
 </li>
 </ul>
 </li>
@@ -424,7 +445,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>clone</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html" title="class in org.apache.hadoop.hbase.monitoring">MonitoredTaskImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.48">clone</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html" title="class in org.apache.hadoop.hbase.monitoring">MonitoredTaskImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.50">clone</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#clone--">MonitoredTask</a></code></span></div>
 <div class="block">Public exposure of Object.clone() in order to allow clients to easily 
  capture current state.</div>
@@ -444,7 +465,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.57">getStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.59">getStartTime</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStartTime--">getStartTime</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -457,7 +478,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>getDescription</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.62">getDescription</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.64">getDescription</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getDescription--">getDescription</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -470,7 +491,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>getStatus</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.67">getStatus</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.69">getStatus</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatus--">getStatus</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -483,7 +504,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>getStatusTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.72">getStatusTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.74">getStatusTime</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatusTime--">getStatusTime</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -496,7 +517,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring">MonitoredTask.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.77">getState</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring">MonitoredTask.State</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.79">getState</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getState--">getState</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -509,20 +530,33 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.82">getStateTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.84">getStateTime</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStateTime--">getStateTime</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="getWarnTime--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getWarnTime</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.89">getWarnTime</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getWarnTime--">getWarnTime</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="getCompletionTimestamp--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompletionTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.87">getCompletionTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.94">getCompletionTimestamp</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getCompletionTimestamp--">getCompletionTimestamp</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -535,7 +569,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>markComplete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.95">markComplete</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.102">markComplete</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#markComplete-java.lang.String-">markComplete</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -548,7 +582,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>pause</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.101">pause</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.108">pause</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#pause-java.lang.String-">pause</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -561,7 +595,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>resume</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.107">resume</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.114">resume</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#resume-java.lang.String-">resume</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -574,7 +608,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.113">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.120">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#abort-java.lang.String-">abort</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -587,7 +621,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>setStatus</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.119">setStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.126">setStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setStatus-java.lang.String-">setStatus</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
@@ -600,7 +634,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>setState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.124">setState</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring">MonitoredTask.State</a>&nbsp;state)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.131">setState</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring">MonitoredTask.State</a>&nbsp;state)</pre>
 </li>
 </ul>
 <a name="setDescription-java.lang.String-">
@@ -609,20 +643,33 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>setDescription</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.130">setDescription</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.137">setDescription</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setDescription-java.lang.String-">setDescription</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="setWarnTime-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setWarnTime</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.142">setWarnTime</a>(long&nbsp;t)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setWarnTime-long-">setWarnTime</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="cleanup--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.135">cleanup</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.147">cleanup</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#cleanup--">MonitoredTask</a></code></span></div>
 <div class="block">Explicitly mark this status as able to be cleaned up,
  even though it might not be complete.</div>
@@ -638,7 +685,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>expireNow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.145">expireNow</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.157">expireNow</a>()</pre>
 <div class="block">Force the completion timestamp backwards so that
  it expires now.</div>
 <dl>
@@ -653,7 +700,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.150">toMap</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.162">toMap</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toMap--">MonitoredTask</a></code></span></div>
 <div class="block">Creates a string map of internal details for extensible exposure of 
  monitored tasks.</div>
@@ -671,7 +718,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockList">
 <li class="blockList">
 <h4>toJSON</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.162">toJSON</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.174">toJSON</a>()
               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toJSON--">MonitoredTask</a></code></span></div>
 <div class="block">Creates a JSON object for parseable exposure of monitored tasks.</div>
@@ -691,7 +738,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredT
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.167">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#line.179">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html
new file mode 100644
index 0000000..2229e18
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html
@@ -0,0 +1,323 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TaskMonitor.MonitorRunnable (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TaskMonitor.MonitorRunnable (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TaskMonitor.MonitorRunnable.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/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" target="_top">Frames</a></li>
+<li><a href="TaskMonitor.MonitorRunnable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>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.monitoring</div>
+<h2 title="Class TaskMonitor.MonitorRunnable" class="title">Class TaskMonitor.MonitorRunnable</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.monitoring.TaskMonitor.MonitorRunnable</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/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.265">TaskMonitor.MonitorRunnable</a>
+extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
+</li>
+</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="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#running">running</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#MonitorRunnable--">MonitorRunnable</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#run--">run</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/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/8/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/8/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/8/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/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="running">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>running</h4>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#line.266">running</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="MonitorRunnable--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>MonitorRunnable</h4>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#line.265">MonitorRunnable</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="run--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>run</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html#line.269">run</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TaskMonitor.MonitorRunnable.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/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" target="_top">Frames</a></li>
+<li><a href="TaskMonitor.MonitorRunnable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>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;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
index c3895a8..128ac5d 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.208">TaskMonitor.PassthroughInvocationHandler</a>&lt;T&gt;
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.251">TaskMonitor.PassthroughInvocationHandler</a>&lt;T&gt;
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/InvocationHandler.html?is-external=true" title="class or interface in java.lang.reflect">InvocationHandler</a></pre>
 <div class="block">An InvocationHandler that simply passes through calls to the original 
@@ -210,7 +210,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/I
 <ul class="blockListLast">
 <li class="blockList">
 <h4>delegatee</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="type parameter in TaskMonitor.PassthroughInvocationHandler">T</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html#line.209">delegatee</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="type parameter in TaskMonitor.PassthroughInvocationHandler">T</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html#line.252">delegatee</a></pre>
 </li>
 </ul>
 </li>
@@ -229,7 +229,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/I
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PassthroughInvocationHandler</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html#line.211">PassthroughInvocationHandler</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="type parameter in TaskMonitor.PassthroughInvocationHandler">T</a>&nbsp;delegatee)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html#line.254">PassthroughInvocationHandler</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="type parameter in TaskMonitor.PassthroughInvocationHandler">T</a>&nbsp;delegatee)</pre>
 </li>
 </ul>
 </li>
@@ -246,7 +246,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/I
 <ul class="blockListLast">
 <li class="blockList">
 <h4>invoke</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html#line.216">invoke</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;proxy,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html#line.259">invoke</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;proxy,
                      <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;method,
                      <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;args)
               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
@@ -286,7 +286,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/I
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
index 569bc2a..f456c95 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.185">TaskMonitor.TaskAndWeakRefPair</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.228">TaskMonitor.TaskAndWeakRefPair</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This class encapsulates an object as well as a weak reference to a proxy
  that passes through calls to that object. In art form:
@@ -226,7 +226,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>impl</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.186">impl</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.229">impl</a></pre>
 </li>
 </ul>
 <a name="weakProxy">
@@ -235,7 +235,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>weakProxy</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">WeakReference</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.187">weakProxy</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ref/WeakReference.html?is-external=true" title="class or interface in java.lang.ref">WeakReference</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.230">weakProxy</a></pre>
 </li>
 </ul>
 </li>
@@ -252,7 +252,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TaskAndWeakRefPair</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.189">TaskAndWeakRefPair</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;stat,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.232">TaskAndWeakRefPair</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;stat,
                           <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;proxy)</pre>
 </li>
 </ul>
@@ -270,7 +270,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.195">get</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.238">get</a>()</pre>
 </li>
 </ul>
 <a name="isDead--">
@@ -279,7 +279,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isDead</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.199">isDead</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html#line.242">isDead</a>()</pre>
 </li>
 </ul>
 </li>


[12/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html
index 87e1c5b..98776b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html
@@ -27,680 +27,678 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.commons.logging.Log;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.commons.logging.LogFactory;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.Cell;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * &lt;p&gt;<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * reached<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * &lt;p&gt;<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * &lt;p&gt;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.50"></a>
-<span class="sourceLineNo">051</span> */<a name="line.51"></a>
-<span class="sourceLineNo">052</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.52"></a>
-<span class="sourceLineNo">053</span>@InterfaceStability.Evolving<a name="line.53"></a>
-<span class="sourceLineNo">054</span>public class ScannerContext {<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  LimitFields limits;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  LimitFields progress;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  NextState scannerState;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * &lt;p&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   * has been made towards the limits so far.<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * &lt;p&gt;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * &lt;p&gt;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * For example: &lt;pre&gt; {@code<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * RegionScanner scanner = ...<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * while(scanner.next(results, context)) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   *   // Do something with a batch of 5 cells<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * saved and considered in future invocations<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  boolean keepProgress;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.98"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.Cell;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * ScannerContext instances encapsulate limit tracking AND progress towards those limits during<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * {@link RegionScanner#next(java.util.List)}.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * &lt;p&gt;<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * A ScannerContext instance should be updated periodically throughout execution whenever progress<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * towards a limit has been made. Each limit can be checked via the appropriate checkLimit method.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * &lt;p&gt;<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * Once a limit has been reached, the scan will stop. The invoker of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * {@link InternalScanner#next(java.util.List)} or {@link RegionScanner#next(java.util.List)} can<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * use the appropriate check*Limit methods to see exactly which limits have been reached.<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * Alternatively, {@link #checkAnyLimitReached(LimitScope)} is provided to see if ANY limit was<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * reached<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * &lt;p&gt;<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * {@link NoLimitScannerContext#NO_LIMIT} is an immutable static definition that can be used<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * whenever a {@link ScannerContext} is needed but limits do not need to be enforced.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * &lt;p&gt;<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * NOTE: It is important that this class only ever expose setter methods that can be safely skipped<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * when limits should be NOT enforced. This is because of the necessary immutability of the class<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * {@link NoLimitScannerContext}. If a setter cannot be safely skipped, the immutable nature of<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * {@link NoLimitScannerContext} will lead to incorrect behavior.<a name="line.48"></a>
+<span class="sourceLineNo">049</span> */<a name="line.49"></a>
+<span class="sourceLineNo">050</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.COPROC)<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@InterfaceStability.Evolving<a name="line.51"></a>
+<span class="sourceLineNo">052</span>public class ScannerContext {<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * Two sets of the same fields. One for the limits, another for the progress towards those limits<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  LimitFields limits;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  LimitFields progress;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * The state of the scanner after the invocation of {@link InternalScanner#next(java.util.List)}<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * or {@link RegionScanner#next(java.util.List)}.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  NextState scannerState;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final NextState DEFAULT_STATE = NextState.MORE_VALUES;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Used as an indication to invocations of {@link InternalScanner#next(java.util.List)} and<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * {@link RegionScanner#next(java.util.List)} that, if true, the progress tracked within this<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * {@link ScannerContext} instance should be considered while evaluating the limits. Useful for<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * enforcing a set of limits across multiple calls (i.e. the limit may not be reached in a single<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * invocation, but any progress made should be considered in future invocations)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * &lt;p&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Defaulting this value to false means that, by default, any tracked progress will be wiped clean<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * on invocations to {@link InternalScanner#next(java.util.List)} and<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * {@link RegionScanner#next(java.util.List)} and the call will be treated as though no progress<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * has been made towards the limits so far.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * &lt;p&gt;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * This is an important mechanism. Users of Internal/Region scanners expect that they can define<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * some limits and then repeatedly invoke {@link InternalScanner#next(List)} or<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * {@link RegionScanner#next(List)} where each invocation respects these limits separately.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * &lt;p&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * For example: &lt;pre&gt; {@code<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * ScannerContext context = new ScannerContext.newBuilder().setBatchLimit(5).build();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * RegionScanner scanner = ...<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * List&lt;Cell&gt; results = new ArrayList&lt;Cell&gt;();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * while(scanner.next(results, context)) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   *   // Do something with a batch of 5 cells<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * }&lt;/pre&gt; However, in the case of RPCs, the server wants to be able to define a set of<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * limits for a particular RPC request and have those limits respected across multiple<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * invocations. This means that the progress made towards the limits in earlier calls will be<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * saved and considered in future invocations<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  boolean keepProgress;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private static boolean DEFAULT_KEEP_PROGRESS = false;<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private Cell lastPeekedCell = null;<a name="line.98"></a>
 <span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private Cell peekedCellInHeartbeat = null;<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>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  final ServerSideScanMetrics metrics;<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    this.limits = new LimitFields();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // Progress fields are initialized to 0<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.keepProgress = keepProgress;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.scannerState = DEFAULT_STATE;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<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>  boolean isTrackingMetrics() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return this.metrics != null;<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>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  ServerSideScanMetrics getMetrics() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assert isTrackingMetrics();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return this.metrics;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  boolean getKeepProgress() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this.keepProgress = keepProgress;<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>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   */<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  void incrementBatchProgress(int batch) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    int currentBatch = progress.getBatch();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    progress.setBatch(currentBatch + batch);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    long curDataSize = progress.getDataSize();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    long curHeapSize = progress.getHeapSize();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    progress.setHeapSize(curHeapSize + heapSize);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  void updateTimeProgress() {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    progress.setTime(System.currentTimeMillis());<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>  int getBatchProgress() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    return progress.getBatch();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  long getDataSizeProgress() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return progress.getHeapSize();<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>  long getTimeProgress() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    setBatchProgress(batchProgress);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    progress.setDataSize(dataSizeProgress);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    progress.setTime(timeProgress);<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * values<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  void clearProgress() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param state<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return The state that was passed in.<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  NextState setScannerState(NextState state) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (!NextState.isValidState(state)) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    return state;<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>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   *         a limit in the middle of a row<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  boolean mayHaveMoreCellsInRow() {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<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>   * @param checkerScope<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @param checkerScope<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>  /**<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param checkerScope<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<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>   * @param checkerScope<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>  /**<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @param scope The scope in which the size limit will be enforced<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    limits.setTimeScope(scope);<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>  int getBatchLimit() {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return limits.getBatch();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  long getDataSizeLimit() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    return limits.getDataSize();<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>  long getTimeLimit() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return limits.getTime();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  boolean checkBatchLimit(LimitScope checkerScope) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    return hasBatchLimit(checkerScope) &amp;&amp; progress.getBatch() &gt;= limits.getBatch();<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>   * @param checkerScope The scope that the limit is being checked from<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  boolean checkSizeLimit(LimitScope checkerScope) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return hasSizeLimit(checkerScope) &amp;&amp; (progress.getDataSize() &gt;= limits.getDataSize()<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        || progress.getHeapSize() &gt;= limits.getHeapSize());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<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>   * @param checkerScope The scope that the limit is being checked from. The time limit is always<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *          checked against {@link System#currentTimeMillis()}<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @return true when the limit is enforceable from the checker's scope and it has been reached<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  boolean checkTimeLimit(LimitScope checkerScope) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return hasTimeLimit(checkerScope) &amp;&amp; progress.getTime() &gt;= limits.getTime();<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>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param checkerScope The scope that the limits are being checked from<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return true when some limit is enforceable from the checker's scope and it has been reached<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   */<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  boolean checkAnyLimitReached(LimitScope checkerScope) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    return checkSizeLimit(checkerScope) || checkBatchLimit(checkerScope)<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        || checkTimeLimit(checkerScope);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public Cell getPeekedCellInHeartbeat() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return peekedCellInHeartbeat;<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>  public void setPeekedCellInHeartbeat(Cell peekedCellInHeartbeat) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    this.peekedCellInHeartbeat = peekedCellInHeartbeat;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  }<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public String toString() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    StringBuilder sb = new StringBuilder();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    sb.append("{");<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    sb.append("limits:");<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    sb.append(limits);<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    sb.append(", progress:");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    sb.append(progress);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>    sb.append(", keepProgress:");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    sb.append(keepProgress);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append(", state:");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append(scannerState);<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("}");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    return sb.toString();<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>  public static Builder newBuilder() {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return new Builder();<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 static Builder newBuilder(boolean keepProgress) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return new Builder(keepProgress);<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 static final class Builder {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean keepProgress = DEFAULT_KEEP_PROGRESS;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    boolean trackMetrics = false;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    LimitFields limits = new LimitFields();<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    private Builder() {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    private Builder(boolean keepProgress) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.keepProgress = keepProgress;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public Builder setKeepProgress(boolean keepProgress) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.keepProgress = keepProgress;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return this;<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>    public Builder setTrackMetrics(boolean trackMetrics) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.trackMetrics = trackMetrics;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      return this;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public Builder setSizeLimit(LimitScope sizeScope, long dataSizeLimit, long heapSizeLimit) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      limits.setDataSize(dataSizeLimit);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      limits.setHeapSize(heapSizeLimit);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      limits.setSizeScope(sizeScope);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return this;<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 Builder setTimeLimit(LimitScope timeScope, long timeLimit) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      limits.setTime(timeLimit);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      limits.setTimeScope(timeScope);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      return this;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public Builder setBatchLimit(int batchLimit) {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      limits.setBatch(batchLimit);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      return this;<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>    public ScannerContext build() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      return new ScannerContext(keepProgress, limits, trackMetrics);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * The possible states a scanner may be in following a call to {@link InternalScanner#next(List)}<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public enum NextState {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    MORE_VALUES(true, false),<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    NO_MORE_VALUES(false, false),<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    SIZE_LIMIT_REACHED(true, true),<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>     * Special case of size limit reached to indicate that the size limit was reached in the middle<a name="line.427"></a>
-<span class="sourceLineNo">428</span>     * of a row and thus a partial results was formed<a name="line.428"></a>
-<span class="sourceLineNo">429</span>     */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    SIZE_LIMIT_REACHED_MID_ROW(true, true),<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    TIME_LIMIT_REACHED(true, true),<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>     * Special case of time limit reached to indicate that the time limit was reached in the middle<a name="line.434"></a>
-<span class="sourceLineNo">435</span>     * of a row and thus a partial results was formed<a name="line.435"></a>
-<span class="sourceLineNo">436</span>     */<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    TIME_LIMIT_REACHED_MID_ROW(true, true),<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    BATCH_LIMIT_REACHED(true, true);<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    private boolean moreValues;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    private boolean limitReached;<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private NextState(boolean moreValues, boolean limitReached) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      this.moreValues = moreValues;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      this.limitReached = limitReached;<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>    /**<a name="line.448"></a>
-<span class="sourceLineNo">449</span>     * @return true when the state indicates that more values may follow those that have been<a name="line.449"></a>
-<span class="sourceLineNo">450</span>     *         returned<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    public boolean hasMoreValues() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      return this.moreValues;<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>     * @return true when the state indicates that a limit has been reached and scan should stop<a name="line.457"></a>
-<span class="sourceLineNo">458</span>     */<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    public boolean limitReached() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      return this.limitReached;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>    public static boolean isValidState(NextState state) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      return state != null;<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>    public static boolean hasMoreValues(NextState state) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return isValidState(state) &amp;&amp; state.hasMoreValues();<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>  /**<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * The various scopes where a limit can be enforced. Used to differentiate when a limit should be<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * enforced or not.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public enum LimitScope {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    /**<a name="line.477"></a>
-<span class="sourceLineNo">478</span>     * Enforcing a limit between rows means that the limit will not be considered until all the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>     * cells for a particular row have been retrieved<a name="line.479"></a>
-<span class="sourceLineNo">480</span>     */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    BETWEEN_ROWS(0),<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>     * Enforcing a limit between cells means that the limit will be considered after each full cell<a name="line.484"></a>
-<span class="sourceLineNo">485</span>     * has been retrieved<a name="line.485"></a>
-<span class="sourceLineNo">486</span>     */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    BETWEEN_CELLS(1);<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>     * When enforcing a limit, we must check that the scope is appropriate for enforcement.<a name="line.490"></a>
-<span class="sourceLineNo">491</span>     * &lt;p&gt;<a name="line.491"></a>
-<span class="sourceLineNo">492</span>     * To communicate this concept, each scope has a depth. A limit will be enforced if the depth of<a name="line.492"></a>
-<span class="sourceLineNo">493</span>     * the checker's scope is less than or equal to the limit's scope. This means that when checking<a name="line.493"></a>
-<span class="sourceLineNo">494</span>     * limits, the checker must know their own scope (i.e. are they checking the limits between<a name="line.494"></a>
-<span class="sourceLineNo">495</span>     * rows, between cells, etc...)<a name="line.495"></a>
-<span class="sourceLineNo">496</span>     */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    int depth;<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>    LimitScope(int depth) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.depth = depth;<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>    int depth() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return depth;<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>     * @param checkerScope The scope in which the limit is being checked<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     * @return true when the checker is in a scope that indicates the limit can be enforced. Limits<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *         can be enforced from "higher or equal" scopes (i.e. the checker's scope is at a<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *         lesser depth than the limit)<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    boolean canEnforceLimitFromScope(LimitScope checkerScope) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      return checkerScope != null &amp;&amp; checkerScope.depth() &lt;= depth;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   * The different fields that can be used as limits in calls to<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * {@link InternalScanner#next(java.util.List)} and {@link RegionScanner#next(java.util.List)}<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  private static class LimitFields {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>     * Default values of the limit fields. Defined such that if a field does NOT change from its<a name="line.524"></a>
-<span class="sourceLineNo">525</span>     * default, it will not be enforced<a name="line.525"></a>
-<span class="sourceLineNo">526</span>     */<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    private static int DEFAULT_BATCH = -1;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    private static long DEFAULT_SIZE = -1L;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    private static long DEFAULT_TIME = -1L;<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>     * Default scope that is assigned to a limit if a scope is not specified.<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     */<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    private static final LimitScope DEFAULT_SCOPE = LimitScope.BETWEEN_ROWS;<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    // The batch limit will always be enforced between cells, thus, there isn't a field to hold the<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    // batch scope<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    int batch = DEFAULT_BATCH;<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>    LimitScope sizeScope = DEFAULT_SCOPE;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    // The sum of cell data sizes(key + value). The Cell data might be in on heap or off heap area.<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    long dataSize = DEFAULT_SIZE;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    // The sum of heap space occupied by all tracked cells. This includes Cell POJO's overhead as<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    // such AND data cells of Cells which are in on heap area.<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    long heapSize = DEFAULT_SIZE;<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span>    LimitScope timeScope = DEFAULT_SCOPE;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    long time = DEFAULT_TIME;<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     * Fields keep their default values.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>     */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    LimitFields() {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
-<span class="sourceLineNo">555</span><a name="line.555"></a>
-<span class="sourceLineNo">556</span>    LimitFields(int batch, LimitScope sizeScope, long size, long heapSize, LimitScope timeScope,<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        long time) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      setFields(batch, sizeScope, size, heapSize, timeScope, time);<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>    void copy(LimitFields limitsToCopy) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      if (limitsToCopy != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>        setFields(limitsToCopy.getBatch(), limitsToCopy.getSizeScope(), limitsToCopy.getDataSize(),<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            limitsToCopy.getHeapSize(), limitsToCopy.getTimeScope(), limitsToCopy.getTime());<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<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>     * Set all fields together.<a name="line.569"></a>
-<span class="sourceLineNo">570</span>     * @param batch<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * @param sizeScope<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     * @param dataSize<a name="line.572"></a>
-<span class="sourceLineNo">573</span>     */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    void setFields(int batch, LimitScope sizeScope, long dataSize, long heapSize,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        LimitScope timeScope, long time) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      setBatch(batch);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      setSizeScope(sizeScope);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      setDataSize(dataSize);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      setHeapSize(heapSize);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      setTimeScope(timeScope);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      setTime(time);<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>    int getBatch() {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      return this.batch;<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>    void setBatch(int batch) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.batch = batch;<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>     * @param checkerScope<a name="line.593"></a>
-<span class="sourceLineNo">594</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.594"></a>
-<span class="sourceLineNo">595</span>     */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    boolean canEnforceBatchLimitFromScope(LimitScope checkerScope) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return LimitScope.BETWEEN_CELLS.canEnforceLimitFromScope(checkerScope);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>    long getDataSize() {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      return this.dataSize;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    long getHeapSize() {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      return this.heapSize;<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>    void setDataSize(long dataSize) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      this.dataSize = dataSize;<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>    void setHeapSize(long heapSize) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      this.heapSize = heapSize;<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>    /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>     * @return {@link LimitScope} indicating scope in which the size limit is enforced<a name="line.617"></a>
-<span class="sourceLineNo">618</span>     */<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    LimitScope getSizeScope() {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return this.sizeScope;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>    /**<a name="line.623"></a>
-<span class="sourceLineNo">624</span>     * Change the scope in which the size limit is enforced<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    void setSizeScope(LimitScope scope) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      this.sizeScope = scope;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    /**<a name="line.630"></a>
-<span class="sourceLineNo">631</span>     * @param checkerScope<a name="line.631"></a>
-<span class="sourceLineNo">632</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.632"></a>
-<span class="sourceLineNo">633</span>     */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    boolean canEnforceSizeLimitFromScope(LimitScope checkerScope) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      return this.sizeScope.canEnforceLimitFromScope(checkerScope);<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>    long getTime() {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      return this.time;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>    void setTime(long time) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.time = time;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>    /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * @return {@link LimitScope} indicating scope in which the time limit is enforced<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    LimitScope getTimeScope() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      return this.timeScope;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    /**<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     * Change the scope in which the time limit is enforced<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     */<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    void setTimeScope(LimitScope scope) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      this.timeScope = scope;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * @param checkerScope<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @return true when the limit can be enforced from the scope of the checker<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>    boolean canEnforceTimeLimitFromScope(LimitScope checkerScope) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      return this.timeScope.canEnforceLimitFromScope(checkerScope);<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>    @Override<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    public String toString() {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      StringBuilder sb = new StringBuilder();<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      sb.append("{");<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>      sb.append("batch:");<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      sb.append(batch);<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>      sb.append(", dataSize:");<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      sb.append(dataSize);<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      sb.append(", heapSize:");<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      sb.append(heapSize);<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>      sb.append(", sizeScope:");<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      sb.append(sizeScope);<a name="line.683"></a>
-<span class="sourceLineNo">684</span><a name="line.684"></a>
-<span class="sourceLineNo">685</span>      sb.append(", time:");<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      sb.append(time);<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>      sb.append(", timeScope:");<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      sb.append(timeScope);<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>      sb.append("}");<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      return sb.toString();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
-<span class="sourceLineNo">695</span>}<a name="line.695"></a>
+<span class="sourceLineNo">100</span>  /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Tracks the relevant server side metrics during scans. null when metrics should not be tracked<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  final ServerSideScanMetrics metrics;<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  ScannerContext(boolean keepProgress, LimitFields limitsToCopy, boolean trackMetrics) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.limits = new LimitFields();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    if (limitsToCopy != null) this.limits.copy(limitsToCopy);<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    // Progress fields are initialized to 0<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    progress = new LimitFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.keepProgress = keepProgress;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.scannerState = DEFAULT_STATE;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.metrics = trackMetrics ? new ServerSideScanMetrics() : null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  boolean isTrackingMetrics() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return this.metrics != null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * Get the metrics instance. Should only be called after a call to {@link #isTrackingMetrics()}<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * has been made to confirm that metrics are indeed being tracked.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * @return {@link ServerSideScanMetrics} instance that is tracking metrics for this scan<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  ServerSideScanMetrics getMetrics() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    assert isTrackingMetrics();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    return this.metrics;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @return true if the progress tracked so far in this instance will be considered during an<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   *         invocation of {@link InternalScanner#next(java.util.List)} or<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   *         {@link RegionScanner#next(java.util.List)}. false when the progress tracked so far<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   *         should not be considered and should instead be wiped away via {@link #clearProgress()}<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  boolean getKeepProgress() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    return keepProgress;<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>  void setKeepProgress(boolean keepProgress) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.keepProgress = keepProgress;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * Progress towards the batch limit has been made. Increment internal tracking of batch progress<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  void incrementBatchProgress(int batch) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    int currentBatch = progress.getBatch();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    progress.setBatch(currentBatch + batch);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<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>   * Progress towards the size limit has been made. Increment internal tracking of size progress<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  void incrementSizeProgress(long dataSize, long heapSize) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    long curDataSize = progress.getDataSize();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    progress.setDataSize(curDataSize + dataSize);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    long curHeapSize = progress.getHeapSize();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    progress.setHeapSize(curHeapSize + heapSize);<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>  /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * Update the time progress with {@link System#currentTimeMillis()}<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  void updateTimeProgress() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    progress.setTime(System.currentTimeMillis());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  int getBatchProgress() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return progress.getBatch();<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>  long getDataSizeProgress() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return progress.getDataSize();<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>  long getHeapSizeProgress() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return progress.getHeapSize();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  long getTimeProgress() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return progress.getTime();<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>  void setProgress(int batchProgress, long sizeProgress, long heapSizeProgress, long timeProgress) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    setBatchProgress(batchProgress);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    setSizeProgress(sizeProgress, heapSizeProgress);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    setTimeProgress(timeProgress);<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>  void setSizeProgress(long dataSizeProgress, long heapSizeProgress) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    progress.setDataSize(dataSizeProgress);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    progress.setHeapSize(heapSizeProgress);<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>  void setBatchProgress(int batchProgress) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    progress.setBatch(batchProgress);<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>  void setTimeProgress(long timeProgress) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    progress.setTime(timeProgress);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<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>   * Clear away any progress that has been made so far. All progress fields are reset to initial<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * values<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void clearProgress() {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    progress.setFields(0, LimitFields.DEFAULT_SCOPE, 0, 0, LimitFields.DEFAULT_SCOPE, 0);<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Note that this is not a typical setter. This setter returns the {@link NextState} that was<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * passed in so that methods can be invoked against the new state. Furthermore, this pattern<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * allows the {@link NoLimitScannerContext} to cleanly override this setter and simply return the<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * new state, thus preserving the immutability of {@link NoLimitScannerContext}<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * @param state<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @return The state that was passed in.<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  NextState setScannerState(NextState state) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!NextState.isValidState(state)) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      throw new IllegalArgumentException("Cannot set to invalid state: " + state);<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>    this.scannerState = state;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return state;<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>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @return true when we have more cells for the current row. This usually because we have reached<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   *         a limit in the middle of a row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  boolean mayHaveMoreCellsInRow() {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return scannerState == NextState.SIZE_LIMIT_REACHED_MID_ROW ||<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        scannerState == NextState.TIME_LIMIT_REACHED_MID_ROW ||<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        scannerState == NextState.BATCH_LIMIT_REACHED;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<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>   * @param checkerScope<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if the batch limit can be enforced in the checker's scope<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  boolean hasBatchLimit(LimitScope checkerScope) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return limits.canEnforceBatchLimitFromScope(checkerScope) &amp;&amp; limits.getBatch() &gt; 0;<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>  /**<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * @param checkerScope<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * @return true if the size limit can be enforced in the checker's scope<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  boolean hasSizeLimit(LimitScope checkerScope) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return limits.canEnforceSizeLimitFromScope(checkerScope)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        &amp;&amp; (limits.getDataSize() &gt; 0 || limits.getHeapSize() &gt; 0);<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>   * @param checkerScope<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * @return true if the time limit can be enforced in the checker's scope<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  boolean hasTimeLimit(LimitScope checkerScope) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    return limits.canEnforceTimeLimitFromScope(checkerScope) &amp;&amp; limits.getTime() &gt; 0;<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>  /**<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @param checkerScope<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * @return true if any limit can be enforced within the checker's scope<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  boolean hasAnyLimit(LimitScope checkerScope) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return hasBatchLimit(checkerScope) || hasSizeLimit(checkerScope) || hasTimeLimit(checkerScope);<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>   * @param scope The scope in which the size limit will be enforced<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  void setSizeLimitScope(LimitScope scope) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    limits.setSizeScope(scope);<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>   * @param scope The scope in which the time limit will be enforced<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  void setTimeLimitScope(LimitScope scope) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    limits.setTimeScope(scope);<a name="line.284"></a>
+<span

<TRUNCATED>

[25/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
index cd6c8c8..380e362 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html
@@ -38,195 +38,257 @@
 <span class="sourceLineNo">030</span>import org.apache.commons.collections.buffer.CircularFifoBuffer;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
 <span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>/**<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * Singleton which keeps track of tasks going on in this VM.<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * A Task here is anything which takes more than a few seconds<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * and the user might want to inquire about the status<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TaskMonitor {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TaskMonitor.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  // Don't keep around any tasks that have completed more than<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  // 60 seconds ago<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private static final long EXPIRATION_TIME = 60*1000;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  static final int MAX_TASKS = 1000;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  <a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static TaskMonitor instance;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private CircularFifoBuffer tasks = new CircularFifoBuffer(MAX_TASKS);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private List&lt;TaskAndWeakRefPair&gt; rpcTasks = Lists.newArrayList();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * Get singleton instance.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * TODO this would be better off scoped to a single daemon<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public static synchronized TaskMonitor get() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    if (instance == null) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      instance = new TaskMonitor();<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    return instance;<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>  public synchronized MonitoredTask createStatus(String description) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    MonitoredTask stat = new MonitoredTaskImpl();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    stat.setDescription(description);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        stat.getClass().getClassLoader(),<a name="line.73"></a>
-<span class="sourceLineNo">074</span>        new Class&lt;?&gt;[] { MonitoredTask.class },<a name="line.74"></a>
-<span class="sourceLineNo">075</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    if (tasks.isFull()) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      purgeExpiredTasks();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    tasks.add(pair);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    return proxy;<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>  public synchronized MonitoredRPCHandler createRPCStatus(String description) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    stat.setDescription(description);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance(<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        stat.getClass().getClassLoader(),<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        new Class&lt;?&gt;[] { MonitoredRPCHandler.class },<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    rpcTasks.add(pair);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return proxy;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private synchronized void purgeExpiredTasks() {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>         it.hasNext();) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      TaskAndWeakRefPair pair = it.next();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      MonitoredTask stat = pair.get();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      <a name="line.101"></a>
-<span class="sourceLineNo">102</span>      if (pair.isDead()) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        // The class who constructed this leaked it. So we can<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        // assume it's done.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        if (stat.getState() == MonitoredTaskImpl.State.RUNNING) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>          LOG.warn("Status " + stat + " appears to have been leaked");<a name="line.106"></a>
-<span class="sourceLineNo">107</span>          stat.cleanup();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      <a name="line.110"></a>
-<span class="sourceLineNo">111</span>      if (canPurge(stat)) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        it.remove();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Produces a list containing copies of the current state of all non-expired <a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * MonitoredTasks handled by this TaskMonitor.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @return A complete list of MonitoredTasks.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public synchronized List&lt;MonitoredTask&gt; getTasks() {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    purgeExpiredTasks();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    ArrayList&lt;MonitoredTask&gt; ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks.size());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>         it.hasNext();) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      TaskAndWeakRefPair pair = it.next();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      MonitoredTask t = pair.get();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      ret.add(t.clone());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>         it.hasNext();) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      TaskAndWeakRefPair pair = it.next();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      MonitoredTask t = pair.get();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      ret.add(t.clone());<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return ret;<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>  private boolean canPurge(MonitoredTask stat) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    long cts = stat.getCompletionTimestamp();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    return (cts &gt; 0 &amp;&amp; System.currentTimeMillis() - cts &gt; EXPIRATION_TIME);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  <a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void dumpAsText(PrintWriter out) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    long now = System.currentTimeMillis();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    <a name="line.148"></a>
-<span class="sourceLineNo">149</span>    List&lt;MonitoredTask&gt; tasks = getTasks();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    for (MonitoredTask task : tasks) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      out.println("Task: " + task.getDescription());<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      out.println("Status: " + task.getState() + ":" + task.getStatus());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      long running = (now - task.getStartTime())/1000;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      if (task.getCompletionTimestamp() != -1) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        long completed = (now - task.getCompletionTimestamp()) / 1000;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        out.println("Completed " + completed + "s ago");<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        out.println("Ran for " +<a name="line.157"></a>
-<span class="sourceLineNo">158</span>            (task.getCompletionTimestamp() - task.getStartTime())/1000<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            + "s");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      } else {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        out.println("Running for " + running + "s");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      out.println();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * This class encapsulates an object as well as a weak reference to a proxy<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * that passes through calls to that object. In art form:<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * &lt;pre&gt;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   *     Proxy  &lt;------------------<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   *       |                       \<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   *       v                        \<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * PassthroughInvocationHandler   |  weak reference<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   *       |                       /<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * MonitoredTaskImpl            / <a name="line.176"></a>
-<span class="sourceLineNo">177</span>   *       |                     /<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * StatAndWeakRefProxy  ------/<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * &lt;/pre&gt;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Since we only return the Proxy to the creator of the MonitorableStatus,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * this means that they can leak that object, and we'll detect it<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * since our weak reference will go null. But, we still have the actual<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * object, so we can log it and display it as a leaked (incomplete) action.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  private static class TaskAndWeakRefPair {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    private MonitoredTask impl;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    private WeakReference&lt;MonitoredTask&gt; weakProxy;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    <a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TaskAndWeakRefPair(MonitoredTask stat,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        MonitoredTask proxy) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.impl = stat;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.weakProxy = new WeakReference&lt;&gt;(proxy);<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>    public MonitoredTask get() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return impl;<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>    public boolean isDead() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return weakProxy.get() == null;<a name="line.200"></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.hbase.HBaseConfiguration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Singleton which keeps track of tasks going on in this VM.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * A Task here is anything which takes more than a few seconds<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * and the user might want to inquire about the status<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TaskMonitor {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(TaskMonitor.class);<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final String MAX_TASKS_KEY = "hbase.taskmonitor.max.tasks";<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final int DEFAULT_MAX_TASKS = 1000;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public static final String RPC_WARN_TIME_KEY = "hbase.taskmonitor.rpc.warn.time";<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public static final long DEFAULT_RPC_WARN_TIME = 0;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public static final String EXPIRATION_TIME_KEY = "hbase.taskmonitor.expiration.time";<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public static final long DEFAULT_EXPIRATION_TIME = 60*1000;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public static final String MONITOR_INTERVAL_KEY = "hbase.taskmonitor.monitor.interval";<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final long DEFAULT_MONITOR_INTERVAL = 10*1000;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static TaskMonitor instance;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private final int maxTasks;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final long rpcWarnTime;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private final long expirationTime;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final CircularFifoBuffer tasks;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final List&lt;TaskAndWeakRefPair&gt; rpcTasks;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final long monitorInterval;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private Thread monitorThread;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  TaskMonitor(Configuration conf) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    maxTasks = conf.getInt(MAX_TASKS_KEY, DEFAULT_MAX_TASKS);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    expirationTime = conf.getLong(EXPIRATION_TIME_KEY, DEFAULT_EXPIRATION_TIME);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    rpcWarnTime = conf.getLong(RPC_WARN_TIME_KEY, DEFAULT_RPC_WARN_TIME);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    tasks = new CircularFifoBuffer(maxTasks);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    rpcTasks = Lists.newArrayList();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    monitorInterval = conf.getLong(MONITOR_INTERVAL_KEY, DEFAULT_MONITOR_INTERVAL);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    monitorThread = new Thread(new MonitorRunnable());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    Threads.setDaemonThreadRunning(monitorThread, "Monitor thread for TaskMonitor");<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Get singleton instance.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * TODO this would be better off scoped to a single daemon<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static synchronized TaskMonitor get() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    if (instance == null) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      instance = new TaskMonitor(HBaseConfiguration.create());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    return instance;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  <a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public synchronized MonitoredTask createStatus(String description) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    MonitoredTask stat = new MonitoredTaskImpl();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    stat.setDescription(description);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        stat.getClass().getClassLoader(),<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        new Class&lt;?&gt;[] { MonitoredTask.class },<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    if (tasks.isFull()) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      purgeExpiredTasks();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    tasks.add(pair);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    return proxy;<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>  public synchronized MonitoredRPCHandler createRPCStatus(String description) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    stat.setDescription(description);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance(<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        stat.getClass().getClassLoader(),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        new Class&lt;?&gt;[] { MonitoredRPCHandler.class },<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    rpcTasks.add(pair);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return proxy;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private synchronized void warnStuckTasks() {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (rpcWarnTime &gt; 0) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          it.hasNext();) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        TaskAndWeakRefPair pair = it.next();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        MonitoredTask stat = pair.get();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        if ((stat.getState() == MonitoredTaskImpl.State.RUNNING) &amp;&amp;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            (now &gt;= stat.getWarnTime() + rpcWarnTime)) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          LOG.warn("Task may be stuck: " + stat);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>          stat.setWarnTime(now);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private synchronized void purgeExpiredTasks() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>         it.hasNext();) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      TaskAndWeakRefPair pair = it.next();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      MonitoredTask stat = pair.get();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      <a name="line.139"></a>
+<span class="sourceLineNo">140</span>      if (pair.isDead()) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        // The class who constructed this leaked it. So we can<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        // assume it's done.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        if (stat.getState() == MonitoredTaskImpl.State.RUNNING) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          LOG.warn("Status " + stat + " appears to have been leaked");<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          stat.cleanup();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      <a name="line.148"></a>
+<span class="sourceLineNo">149</span>      if (canPurge(stat)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        it.remove();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<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><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Produces a list containing copies of the current state of all non-expired <a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * MonitoredTasks handled by this TaskMonitor.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @return A complete list of MonitoredTasks.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public synchronized List&lt;MonitoredTask&gt; getTasks() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    purgeExpiredTasks();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;MonitoredTask&gt; ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks.size());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         it.hasNext();) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      TaskAndWeakRefPair pair = it.next();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      MonitoredTask t = pair.get();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      ret.add(t.clone());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>         it.hasNext();) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      TaskAndWeakRefPair pair = it.next();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      MonitoredTask t = pair.get();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      ret.add(t.clone());<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return ret;<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 boolean canPurge(MonitoredTask stat) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    long cts = stat.getCompletionTimestamp();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    return (cts &gt; 0 &amp;&amp; EnvironmentEdgeManager.currentTime() - cts &gt; expirationTime);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public void dumpAsText(PrintWriter out) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    <a name="line.185"></a>
+<span class="sourceLineNo">186</span>    List&lt;MonitoredTask&gt; tasks = getTasks();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (MonitoredTask task : tasks) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      out.println("Task: " + task.getDescription());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      out.println("Status: " + task.getState() + ":" + task.getStatus());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      long running = (now - task.getStartTime())/1000;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (task.getCompletionTimestamp() != -1) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        long completed = (now - task.getCompletionTimestamp()) / 1000;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        out.println("Completed " + completed + "s ago");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        out.println("Ran for " +<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            (task.getCompletionTimestamp() - task.getStartTime())/1000<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            + "s");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        out.println("Running for " + running + "s");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      out.println();<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>  <a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * An InvocationHandler that simply passes through calls to the original <a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * object.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  private static class PassthroughInvocationHandler&lt;T&gt; implements InvocationHandler {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private T delegatee;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    <a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public PassthroughInvocationHandler(T delegatee) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      this.delegatee = delegatee;<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>    public Object invoke(Object proxy, Method method, Object[] args)<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        throws Throwable {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return method.invoke(delegatee, args);<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>}<a name="line.221"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public synchronized void shutdown() {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    if (this.monitorThread != null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      monitorThread.interrupt();<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><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * This class encapsulates an object as well as a weak reference to a proxy<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * that passes through calls to that object. In art form:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * &lt;pre&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   *     Proxy  &lt;------------------<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   *       |                       \<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   *       v                        \<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * PassthroughInvocationHandler   |  weak reference<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   *       |                       /<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * MonitoredTaskImpl            / <a name="line.219"></a>
+<span class="sourceLineNo">220</span>   *       |                     /<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * StatAndWeakRefProxy  ------/<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;/pre&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * Since we only return the Proxy to the creator of the MonitorableStatus,<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * this means that they can leak that object, and we'll detect it<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * since our weak reference will go null. But, we still have the actual<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * object, so we can log it and display it as a leaked (incomplete) action.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  private static class TaskAndWeakRefPair {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    private MonitoredTask impl;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    private WeakReference&lt;MonitoredTask&gt; weakProxy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    <a name="line.231"></a>
+<span class="sourceLineNo">232</span>    public TaskAndWeakRefPair(MonitoredTask stat,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        MonitoredTask proxy) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      this.impl = stat;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      this.weakProxy = new WeakReference&lt;&gt;(proxy);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    <a name="line.237"></a>
+<span class="sourceLineNo">238</span>    public MonitoredTask get() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return impl;<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>    public boolean isDead() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      return weakProxy.get() == null;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  <a name="line.246"></a>
+<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * An InvocationHandler that simply passes through calls to the original <a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * object.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  private static class PassthroughInvocationHandler&lt;T&gt; implements InvocationHandler {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    private T delegatee;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    <a name="line.253"></a>
+<span class="sourceLineNo">254</span>    public PassthroughInvocationHandler(T delegatee) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      this.delegatee = delegatee;<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>    public Object invoke(Object proxy, Method method, Object[] args)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        throws Throwable {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return method.invoke(delegatee, args);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }    <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>  private class MonitorRunnable implements Runnable {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    private boolean running = true;<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>    public void run() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      while (running) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          Thread.sleep(monitorInterval);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          if (tasks.isFull()) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            purgeExpiredTasks();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          warnStuckTasks();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } catch (InterruptedException e) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          running = false;<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>}<a name="line.283"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
index cd6c8c8..380e362 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html
@@ -38,195 +38,257 @@
 <span class="sourceLineNo">030</span>import org.apache.commons.collections.buffer.CircularFifoBuffer;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
 <span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>/**<a name="line.38"></a>
-<span class="sourceLineNo">039</span> * Singleton which keeps track of tasks going on in this VM.<a name="line.39"></a>
-<span class="sourceLineNo">040</span> * A Task here is anything which takes more than a few seconds<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * and the user might want to inquire about the status<a name="line.41"></a>
-<span class="sourceLineNo">042</span> */<a name="line.42"></a>
-<span class="sourceLineNo">043</span>@InterfaceAudience.Private<a name="line.43"></a>
-<span class="sourceLineNo">044</span>public class TaskMonitor {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static final Log LOG = LogFactory.getLog(TaskMonitor.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  // Don't keep around any tasks that have completed more than<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  // 60 seconds ago<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private static final long EXPIRATION_TIME = 60*1000;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  static final int MAX_TASKS = 1000;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  <a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static TaskMonitor instance;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private CircularFifoBuffer tasks = new CircularFifoBuffer(MAX_TASKS);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private List&lt;TaskAndWeakRefPair&gt; rpcTasks = Lists.newArrayList();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  /**<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * Get singleton instance.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * TODO this would be better off scoped to a single daemon<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public static synchronized TaskMonitor get() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    if (instance == null) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      instance = new TaskMonitor();<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    return instance;<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>  public synchronized MonitoredTask createStatus(String description) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    MonitoredTask stat = new MonitoredTaskImpl();<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    stat.setDescription(description);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        stat.getClass().getClassLoader(),<a name="line.73"></a>
-<span class="sourceLineNo">074</span>        new Class&lt;?&gt;[] { MonitoredTask.class },<a name="line.74"></a>
-<span class="sourceLineNo">075</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    if (tasks.isFull()) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      purgeExpiredTasks();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    tasks.add(pair);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    return proxy;<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>  public synchronized MonitoredRPCHandler createRPCStatus(String description) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    stat.setDescription(description);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance(<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        stat.getClass().getClassLoader(),<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        new Class&lt;?&gt;[] { MonitoredRPCHandler.class },<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    rpcTasks.add(pair);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return proxy;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private synchronized void purgeExpiredTasks() {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.97"></a>
-<span class="sourceLineNo">098</span>         it.hasNext();) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      TaskAndWeakRefPair pair = it.next();<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      MonitoredTask stat = pair.get();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      <a name="line.101"></a>
-<span class="sourceLineNo">102</span>      if (pair.isDead()) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        // The class who constructed this leaked it. So we can<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        // assume it's done.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        if (stat.getState() == MonitoredTaskImpl.State.RUNNING) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>          LOG.warn("Status " + stat + " appears to have been leaked");<a name="line.106"></a>
-<span class="sourceLineNo">107</span>          stat.cleanup();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      <a name="line.110"></a>
-<span class="sourceLineNo">111</span>      if (canPurge(stat)) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        it.remove();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Produces a list containing copies of the current state of all non-expired <a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * MonitoredTasks handled by this TaskMonitor.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @return A complete list of MonitoredTasks.<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public synchronized List&lt;MonitoredTask&gt; getTasks() {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    purgeExpiredTasks();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    ArrayList&lt;MonitoredTask&gt; ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks.size());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>         it.hasNext();) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      TaskAndWeakRefPair pair = it.next();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      MonitoredTask t = pair.get();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      ret.add(t.clone());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>         it.hasNext();) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      TaskAndWeakRefPair pair = it.next();<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      MonitoredTask t = pair.get();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      ret.add(t.clone());<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return ret;<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>  private boolean canPurge(MonitoredTask stat) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    long cts = stat.getCompletionTimestamp();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    return (cts &gt; 0 &amp;&amp; System.currentTimeMillis() - cts &gt; EXPIRATION_TIME);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  <a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void dumpAsText(PrintWriter out) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    long now = System.currentTimeMillis();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    <a name="line.148"></a>
-<span class="sourceLineNo">149</span>    List&lt;MonitoredTask&gt; tasks = getTasks();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    for (MonitoredTask task : tasks) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      out.println("Task: " + task.getDescription());<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      out.println("Status: " + task.getState() + ":" + task.getStatus());<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      long running = (now - task.getStartTime())/1000;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      if (task.getCompletionTimestamp() != -1) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        long completed = (now - task.getCompletionTimestamp()) / 1000;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        out.println("Completed " + completed + "s ago");<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        out.println("Ran for " +<a name="line.157"></a>
-<span class="sourceLineNo">158</span>            (task.getCompletionTimestamp() - task.getStartTime())/1000<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            + "s");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      } else {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        out.println("Running for " + running + "s");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      out.println();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * This class encapsulates an object as well as a weak reference to a proxy<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * that passes through calls to that object. In art form:<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * &lt;pre&gt;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   *     Proxy  &lt;------------------<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   *       |                       \<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   *       v                        \<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * PassthroughInvocationHandler   |  weak reference<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   *       |                       /<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * MonitoredTaskImpl            / <a name="line.176"></a>
-<span class="sourceLineNo">177</span>   *       |                     /<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * StatAndWeakRefProxy  ------/<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * &lt;/pre&gt;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Since we only return the Proxy to the creator of the MonitorableStatus,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * this means that they can leak that object, and we'll detect it<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * since our weak reference will go null. But, we still have the actual<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * object, so we can log it and display it as a leaked (incomplete) action.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  private static class TaskAndWeakRefPair {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    private MonitoredTask impl;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    private WeakReference&lt;MonitoredTask&gt; weakProxy;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    <a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public TaskAndWeakRefPair(MonitoredTask stat,<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        MonitoredTask proxy) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      this.impl = stat;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      this.weakProxy = new WeakReference&lt;&gt;(proxy);<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>    public MonitoredTask get() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      return impl;<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>    public boolean isDead() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      return weakProxy.get() == null;<a name="line.200"></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.hbase.HBaseConfiguration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Singleton which keeps track of tasks going on in this VM.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * A Task here is anything which takes more than a few seconds<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * and the user might want to inquire about the status<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TaskMonitor {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(TaskMonitor.class);<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final String MAX_TASKS_KEY = "hbase.taskmonitor.max.tasks";<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final int DEFAULT_MAX_TASKS = 1000;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public static final String RPC_WARN_TIME_KEY = "hbase.taskmonitor.rpc.warn.time";<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public static final long DEFAULT_RPC_WARN_TIME = 0;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  public static final String EXPIRATION_TIME_KEY = "hbase.taskmonitor.expiration.time";<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public static final long DEFAULT_EXPIRATION_TIME = 60*1000;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public static final String MONITOR_INTERVAL_KEY = "hbase.taskmonitor.monitor.interval";<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final long DEFAULT_MONITOR_INTERVAL = 10*1000;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static TaskMonitor instance;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private final int maxTasks;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final long rpcWarnTime;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private final long expirationTime;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final CircularFifoBuffer tasks;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final List&lt;TaskAndWeakRefPair&gt; rpcTasks;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final long monitorInterval;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private Thread monitorThread;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  TaskMonitor(Configuration conf) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    maxTasks = conf.getInt(MAX_TASKS_KEY, DEFAULT_MAX_TASKS);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    expirationTime = conf.getLong(EXPIRATION_TIME_KEY, DEFAULT_EXPIRATION_TIME);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    rpcWarnTime = conf.getLong(RPC_WARN_TIME_KEY, DEFAULT_RPC_WARN_TIME);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    tasks = new CircularFifoBuffer(maxTasks);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    rpcTasks = Lists.newArrayList();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    monitorInterval = conf.getLong(MONITOR_INTERVAL_KEY, DEFAULT_MONITOR_INTERVAL);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    monitorThread = new Thread(new MonitorRunnable());<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    Threads.setDaemonThreadRunning(monitorThread, "Monitor thread for TaskMonitor");<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * Get singleton instance.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * TODO this would be better off scoped to a single daemon<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static synchronized TaskMonitor get() {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    if (instance == null) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      instance = new TaskMonitor(HBaseConfiguration.create());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    return instance;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  <a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public synchronized MonitoredTask createStatus(String description) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    MonitoredTask stat = new MonitoredTaskImpl();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    stat.setDescription(description);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    MonitoredTask proxy = (MonitoredTask) Proxy.newProxyInstance(<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        stat.getClass().getClassLoader(),<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        new Class&lt;?&gt;[] { MonitoredTask.class },<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    if (tasks.isFull()) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      purgeExpiredTasks();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    tasks.add(pair);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    return proxy;<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>  public synchronized MonitoredRPCHandler createRPCStatus(String description) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    MonitoredRPCHandler stat = new MonitoredRPCHandlerImpl();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    stat.setDescription(description);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    MonitoredRPCHandler proxy = (MonitoredRPCHandler) Proxy.newProxyInstance(<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        stat.getClass().getClassLoader(),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        new Class&lt;?&gt;[] { MonitoredRPCHandler.class },<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        new PassthroughInvocationHandler&lt;&gt;(stat));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TaskAndWeakRefPair pair = new TaskAndWeakRefPair(stat, proxy);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    rpcTasks.add(pair);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return proxy;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  private synchronized void warnStuckTasks() {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (rpcWarnTime &gt; 0) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      final long now = EnvironmentEdgeManager.currentTime();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          it.hasNext();) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        TaskAndWeakRefPair pair = it.next();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        MonitoredTask stat = pair.get();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        if ((stat.getState() == MonitoredTaskImpl.State.RUNNING) &amp;&amp;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            (now &gt;= stat.getWarnTime() + rpcWarnTime)) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>          LOG.warn("Task may be stuck: " + stat);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>          stat.setWarnTime(now);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private synchronized void purgeExpiredTasks() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>         it.hasNext();) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      TaskAndWeakRefPair pair = it.next();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      MonitoredTask stat = pair.get();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      <a name="line.139"></a>
+<span class="sourceLineNo">140</span>      if (pair.isDead()) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        // The class who constructed this leaked it. So we can<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        // assume it's done.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        if (stat.getState() == MonitoredTaskImpl.State.RUNNING) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          LOG.warn("Status " + stat + " appears to have been leaked");<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          stat.cleanup();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      <a name="line.148"></a>
+<span class="sourceLineNo">149</span>      if (canPurge(stat)) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        it.remove();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<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><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Produces a list containing copies of the current state of all non-expired <a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * MonitoredTasks handled by this TaskMonitor.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   * @return A complete list of MonitoredTasks.<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public synchronized List&lt;MonitoredTask&gt; getTasks() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    purgeExpiredTasks();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    ArrayList&lt;MonitoredTask&gt; ret = Lists.newArrayListWithCapacity(tasks.size() + rpcTasks.size());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = tasks.iterator();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>         it.hasNext();) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      TaskAndWeakRefPair pair = it.next();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      MonitoredTask t = pair.get();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      ret.add(t.clone());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    for (Iterator&lt;TaskAndWeakRefPair&gt; it = rpcTasks.iterator();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>         it.hasNext();) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      TaskAndWeakRefPair pair = it.next();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      MonitoredTask t = pair.get();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      ret.add(t.clone());<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    return ret;<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 boolean canPurge(MonitoredTask stat) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    long cts = stat.getCompletionTimestamp();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    return (cts &gt; 0 &amp;&amp; EnvironmentEdgeManager.currentTime() - cts &gt; expirationTime);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public void dumpAsText(PrintWriter out) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    <a name="line.185"></a>
+<span class="sourceLineNo">186</span>    List&lt;MonitoredTask&gt; tasks = getTasks();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (MonitoredTask task : tasks) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      out.println("Task: " + task.getDescription());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      out.println("Status: " + task.getState() + ":" + task.getStatus());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      long running = (now - task.getStartTime())/1000;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (task.getCompletionTimestamp() != -1) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        long completed = (now - task.getCompletionTimestamp()) / 1000;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        out.println("Completed " + completed + "s ago");<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        out.println("Ran for " +<a name="line.194"></a>
+<span class="sourceLineNo">195</span>            (task.getCompletionTimestamp() - task.getStartTime())/1000<a name="line.195"></a>
+<span class="sourceLineNo">196</span>            + "s");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      } else {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        out.println("Running for " + running + "s");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      out.println();<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>  <a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * An InvocationHandler that simply passes through calls to the original <a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * object.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  private static class PassthroughInvocationHandler&lt;T&gt; implements InvocationHandler {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private T delegatee;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    <a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public PassthroughInvocationHandler(T delegatee) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      this.delegatee = delegatee;<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>    public Object invoke(Object proxy, Method method, Object[] args)<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        throws Throwable {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return method.invoke(delegatee, args);<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>}<a name="line.221"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public synchronized void shutdown() {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    if (this.monitorThread != null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      monitorThread.interrupt();<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><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * This class encapsulates an object as well as a weak reference to a proxy<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * that passes through calls to that object. In art form:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * &lt;pre&gt;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   *     Proxy  &lt;------------------<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   *       |                       \<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   *       v                        \<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * PassthroughInvocationHandler   |  weak reference<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   *       |                       /<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * MonitoredTaskImpl            / <a name="line.219"></a>
+<span class="sourceLineNo">220</span>   *       |                     /<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * StatAndWeakRefProxy  ------/<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;/pre&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * Since we only return the Proxy to the creator of the MonitorableStatus,<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * this means that they can leak that object, and we'll detect it<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * since our weak reference will go null. But, we still have the actual<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * object, so we can log it and display it as a leaked (incomplete) action.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  private static class TaskAndWeakRefPair {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    private MonitoredTask impl;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    private WeakReference&lt;MonitoredTask&gt; weakProxy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    <a name="line.231"></a>
+<span class="sourceLineNo">232</span>    public TaskAndWeakRefPair(MonitoredTask stat,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        MonitoredTask proxy) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      this.impl = stat;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      this.weakProxy = new WeakReference&lt;&gt;(proxy);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    <a name="line.237"></a>
+<span class="sourceLineNo">238</span>    public MonitoredTask get() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return impl;<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>    public boolean isDead() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      return weakProxy.get() == null;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  <a name="line.246"></a>
+<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * An InvocationHandler that simply passes through calls to the original <a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * object.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  private static class PassthroughInvocationHandler&lt;T&gt; implements InvocationHandler {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    private T delegatee;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    <a name="line.253"></a>
+<span class="sourceLineNo">254</span>    public PassthroughInvocationHandler(T delegatee) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      this.delegatee = delegatee;<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>    public Object invoke(Object proxy, Method method, Object[] args)<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        throws Throwable {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      return method.invoke(delegatee, args);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }    <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>  private class MonitorRunnable implements Runnable {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    private boolean running = true;<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>    public void run() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      while (running) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        try {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          Thread.sleep(monitorInterval);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>          if (tasks.isFull()) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>            purgeExpiredTasks();<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          warnStuckTasks();<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        } catch (InterruptedException e) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          running = false;<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>}<a name="line.283"></a>
 
 
 


[41/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
index 1a23092..a76ffcb 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
@@ -114,6 +114,19 @@
 </tr>
 </tbody>
 </table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a> with type parameters of type <a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</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="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#cursor">cursor</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
 <caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a> that return <a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
@@ -142,6 +155,25 @@
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a> that return types with arguments of type <a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#cursor--">cursor</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">RawScanResultConsumer.ScanController.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">cursor</a></span>()</code>
+<div class="block">Get the scan cursor if available.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
 <caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-summary.html b/devapidocs/org/apache/hadoop/hbase/client/package-summary.html
index ee1df3d..652dfc1 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-summary.html
@@ -296,7 +296,7 @@
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></td>
 <td class="colLast">
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="rowColor">

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/client/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-use.html b/devapidocs/org/apache/hadoop/hbase/client/package-use.html
index fdf0b42..e6f355b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-use.html
@@ -417,7 +417,7 @@ service.</div>
 </tr>
 <tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/RawScanResultConsumer.ScanController.html#org.apache.hadoop.hbase">RawScanResultConsumer.ScanController</a>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="altColor">
@@ -1234,7 +1234,7 @@ service.</div>
 </tr>
 <tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/RawScanResultConsumer.ScanController.html#org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="rowColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 d31dd75..0f94477 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -175,14 +175,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 2626f43..d73c348 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 4617b31..94a7aeb 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -284,10 +284,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 c7af2b3..a31b14c 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -312,11 +312,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html
index 6acefbd..8eaa605 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html
@@ -201,7 +201,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#cleanup--">cleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#clone--">clone</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#expireNow--">expireNow</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getCompletionTimestamp--">getCompletionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getDescription--">getDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStartTime--">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getState--">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStateTime--">getStateTime<
 /a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatus--">getStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatusTime--">getStatusTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#markComplete-java.lang.String-">markComplete</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#pause-java.lang.String-">pause</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#resume-java.lang.String-">resume</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setDescription-java.lang.String-">setDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setStatus-java.lang.String-">setStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toJSON--">toJSON</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/M
 onitoredTask.html#toMap--">toMap</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#cleanup--">cleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#clone--">clone</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#expireNow--">expireNow</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getCompletionTimestamp--">getCompletionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getDescription--">getDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStartTime--">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getState--">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStateTime--">getStateTime<
 /a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatus--">getStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatusTime--">getStatusTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getWarnTime--">getWarnTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#markComplete-java.lang.String-">markComplete</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#pause-java.lang.String-">pause</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#resume-java.lang.String-">resume</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setDescription-java.lang.String-">setDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setStatus-java.lang.String-">setStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/mo
 nitoring/MonitoredTask.html#setWarnTime-long-">setWarnTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toJSON--">toJSON</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toMap--">toMap</a></code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
index af256b2..87161ca 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.html
@@ -338,7 +338,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredR
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html" title="class in org.apache.hadoop.hbase.monitoring">MonitoredTaskImpl</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#cleanup--">cleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#expireNow--">expireNow</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getCompletionTimestamp--">getCompletionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getDescription--">getDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getStartTime--">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getState--">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getStateTime--">getStateTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/Mo
 nitoredTaskImpl.html#getStatusTime--">getStatusTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#pause-java.lang.String-">pause</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#resume-java.lang.String-">resume</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setDescription-java.lang.String-">setDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setState-org.apache.hadoop.hbase.monitoring.MonitoredTask.State-">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setStatus-java.lang.String-">setStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#toJSON--">toJSON</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#cleanup--">cleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#expireNow--">expireNow</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getCompletionTimestamp--">getCompletionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getDescription--">getDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getStartTime--">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getState--">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getStateTime--">getStateTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/Mo
 nitoredTaskImpl.html#getStatusTime--">getStatusTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#getWarnTime--">getWarnTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#pause-java.lang.String-">pause</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#resume-java.lang.String-">resume</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setDescription-java.lang.String-">setDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setState-org.apache.hadoop.hbase.monitoring.MonitoredTask.State-">setState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setStatus-java.lang.String-">setStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.html#setWarnTime-long-">setWarnTime</a>, <a href="../../../../../org/apache/hadoop/hbas
 e/monitoring/MonitoredTaskImpl.html#toJSON--">toJSON</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -352,7 +352,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredR
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#cleanup--">cleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#expireNow--">expireNow</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getCompletionTimestamp--">getCompletionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getDescription--">getDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStartTime--">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getState--">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStateTime--">getStateTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatusTime--
 ">getStatusTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#pause-java.lang.String-">pause</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#resume-java.lang.String-">resume</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setDescription-java.lang.String-">setDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setStatus-java.lang.String-">setStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toJSON--">toJSON</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#cleanup--">cleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#expireNow--">expireNow</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getCompletionTimestamp--">getCompletionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getDescription--">getDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStartTime--">getStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getState--">getState</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStateTime--">getStateTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatusTime--
 ">getStatusTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getWarnTime--">getWarnTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#pause-java.lang.String-">pause</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#resume-java.lang.String-">resume</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setDescription-java.lang.String-">setDescription</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setStatus-java.lang.String-">setStatus</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setWarnTime-long-">setWarnTime</a>, <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toJSON--">toJSON</a></code></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTask.html b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
index b9fafe6..648b31d 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/MonitoredTask.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -204,32 +204,40 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getStatusTime--">getStatusTime</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i11" class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#getWarnTime--">getWarnTime</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#markComplete-java.lang.String-">markComplete</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#pause-java.lang.String-">pause</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#resume-java.lang.String-">resume</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setDescription-java.lang.String-">setDescription</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setStatus-java.lang.String-">setStatus</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#setWarnTime-long-">setWarnTime</a></span>(long&nbsp;t)</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toJSON--">toJSON</a></span>()</code>
 <div class="block">Creates a JSON object for parseable exposure of monitored tasks.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html#toMap--">toMap</a></span>()</code>
 <div class="block">Creates a string map of internal details for extensible exposure of 
@@ -314,13 +322,22 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.41">getCompletionTimestamp</a>()</pre>
 </li>
 </ul>
+<a name="getWarnTime--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getWarnTime</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.42">getWarnTime</a>()</pre>
+</li>
+</ul>
 <a name="markComplete-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>markComplete</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.43">markComplete</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.44">markComplete</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 </li>
 </ul>
 <a name="pause-java.lang.String-">
@@ -329,7 +346,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>pause</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.44">pause</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.45">pause</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 </li>
 </ul>
 <a name="resume-java.lang.String-">
@@ -338,7 +355,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>resume</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.45">resume</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.46">resume</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 </li>
 </ul>
 <a name="abort-java.lang.String-">
@@ -347,7 +364,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.46">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.47">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 </li>
 </ul>
 <a name="expireNow--">
@@ -356,7 +373,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>expireNow</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.47">expireNow</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.48">expireNow</a>()</pre>
 </li>
 </ul>
 <a name="setStatus-java.lang.String-">
@@ -365,7 +382,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setStatus</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.49">setStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.50">setStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;status)</pre>
 </li>
 </ul>
 <a name="setDescription-java.lang.String-">
@@ -374,7 +391,16 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setDescription</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.50">setDescription</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.51">setDescription</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
+</li>
+</ul>
+<a name="setWarnTime-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setWarnTime</h4>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.52">setWarnTime</a>(long&nbsp;t)</pre>
 </li>
 </ul>
 <a name="cleanup--">
@@ -383,7 +409,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanup</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.56">cleanup</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.58">cleanup</a>()</pre>
 <div class="block">Explicitly mark this status as able to be cleaned up,
  even though it might not be complete.</div>
 </li>
@@ -394,7 +420,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>clone</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.63">clone</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.65">clone</a>()</pre>
 <div class="block">Public exposure of Object.clone() in order to allow clients to easily 
  capture current state.</div>
 <dl>
@@ -409,7 +435,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.70">toMap</a>()
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.72">toMap</a>()
                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a string map of internal details for extensible exposure of 
  monitored tasks.</div>
@@ -427,7 +453,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Cloneable.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toJSON</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.76">toJSON</a>()
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/MonitoredTask.html#line.78">toJSON</a>()
        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates a JSON object for parseable exposure of monitored tasks.</div>
 <dl>


[39/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.html b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
index 10f9a61..5a4950c 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/TaskMonitor.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":10,"i6":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":9,"i5":10,"i6":10,"i7":10,"i8":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/monitoring/StateDumpServlet.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/monitoring/TaskMonitor.html" target="_top">Frames</a></li>
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.44">TaskMonitor</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.47">TaskMonitor</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Singleton which keeps track of tasks going on in this VM.
  A Task here is anything which takes more than a few seconds
@@ -134,13 +134,17 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Class and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.MonitorRunnable</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private static class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.PassthroughInvocationHandler</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="type parameter in TaskMonitor.PassthroughInvocationHandler">T</a>&gt;</span></code>
 <div class="block">An InvocationHandler that simply passes through calls to the original 
  object.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.TaskAndWeakRefPair</a></span></code>
 <div class="block">This class encapsulates an object as well as a weak reference to a proxy
@@ -163,26 +167,70 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#EXPIRATION_TIME">EXPIRATION_TIME</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_EXPIRATION_TIME">DEFAULT_EXPIRATION_TIME</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_MAX_TASKS">DEFAULT_MAX_TASKS</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_MONITOR_INTERVAL">DEFAULT_MONITOR_INTERVAL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#DEFAULT_RPC_WARN_TIME">DEFAULT_RPC_WARN_TIME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#EXPIRATION_TIME_KEY">EXPIRATION_TIME_KEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#expirationTime">expirationTime</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#instance">instance</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MAX_TASKS_KEY">MAX_TASKS_KEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#maxTasks">maxTasks</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MONITOR_INTERVAL_KEY">MONITOR_INTERVAL_KEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#monitorInterval">monitorInterval</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#monitorThread">monitorThread</a></span></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#MAX_TASKS">MAX_TASKS</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#RPC_WARN_TIME_KEY">RPC_WARN_TIME_KEY</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.TaskAndWeakRefPair</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#rpcTasks">rpcTasks</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#rpcWarnTime">rpcWarnTime</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private org.apache.commons.collections.buffer.CircularFifoBuffer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#tasks">tasks</a></span></code>&nbsp;</td>
 </tr>
@@ -201,7 +249,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#TaskMonitor--">TaskMonitor</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#TaskMonitor-org.apache.hadoop.conf.Configuration-">TaskMonitor</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -251,6 +299,14 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#purgeExpiredTasks--">purgeExpiredTasks</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#shutdown--">shutdown</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html#warnStuckTasks--">warnStuckTasks</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -279,32 +335,110 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.45">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.48">LOG</a></pre>
+</li>
+</ul>
+<a name="MAX_TASKS_KEY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MAX_TASKS_KEY</h4>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.50">MAX_TASKS_KEY</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.MAX_TASKS_KEY">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="DEFAULT_MAX_TASKS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_MAX_TASKS</h4>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.51">DEFAULT_MAX_TASKS</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_MAX_TASKS">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="RPC_WARN_TIME_KEY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>RPC_WARN_TIME_KEY</h4>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.52">RPC_WARN_TIME_KEY</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.RPC_WARN_TIME_KEY">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="DEFAULT_RPC_WARN_TIME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_RPC_WARN_TIME</h4>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.53">DEFAULT_RPC_WARN_TIME</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_RPC_WARN_TIME">Constant Field Values</a></dd>
+</dl>
 </li>
 </ul>
-<a name="EXPIRATION_TIME">
+<a name="EXPIRATION_TIME_KEY">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>EXPIRATION_TIME</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.49">EXPIRATION_TIME</a></pre>
+<h4>EXPIRATION_TIME_KEY</h4>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.54">EXPIRATION_TIME_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.EXPIRATION_TIME">Constant Field Values</a></dd>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.EXPIRATION_TIME_KEY">Constant Field Values</a></dd>
 </dl>
 </li>
 </ul>
-<a name="MAX_TASKS">
+<a name="DEFAULT_EXPIRATION_TIME">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>MAX_TASKS</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.52">MAX_TASKS</a></pre>
+<h4>DEFAULT_EXPIRATION_TIME</h4>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.55">DEFAULT_EXPIRATION_TIME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.MAX_TASKS">Constant Field Values</a></dd>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_EXPIRATION_TIME">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="MONITOR_INTERVAL_KEY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MONITOR_INTERVAL_KEY</h4>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.56">MONITOR_INTERVAL_KEY</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.MONITOR_INTERVAL_KEY">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="DEFAULT_MONITOR_INTERVAL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_MONITOR_INTERVAL</h4>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.57">DEFAULT_MONITOR_INTERVAL</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.monitoring.TaskMonitor.DEFAULT_MONITOR_INTERVAL">Constant Field Values</a></dd>
 </dl>
 </li>
 </ul>
@@ -314,7 +448,34 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>instance</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.54">instance</a></pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.59">instance</a></pre>
+</li>
+</ul>
+<a name="maxTasks">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>maxTasks</h4>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.61">maxTasks</a></pre>
+</li>
+</ul>
+<a name="rpcWarnTime">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rpcWarnTime</h4>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.62">rpcWarnTime</a></pre>
+</li>
+</ul>
+<a name="expirationTime">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>expirationTime</h4>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.63">expirationTime</a></pre>
 </li>
 </ul>
 <a name="tasks">
@@ -323,16 +484,34 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tasks</h4>
-<pre>private&nbsp;org.apache.commons.collections.buffer.CircularFifoBuffer <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.55">tasks</a></pre>
+<pre>private final&nbsp;org.apache.commons.collections.buffer.CircularFifoBuffer <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.64">tasks</a></pre>
 </li>
 </ul>
 <a name="rpcTasks">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>rpcTasks</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.TaskAndWeakRefPair</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.56">rpcTasks</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.TaskAndWeakRefPair</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.65">rpcTasks</a></pre>
+</li>
+</ul>
+<a name="monitorInterval">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>monitorInterval</h4>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.66">monitorInterval</a></pre>
+</li>
+</ul>
+<a name="monitorThread">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>monitorThread</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.67">monitorThread</a></pre>
 </li>
 </ul>
 </li>
@@ -343,13 +522,13 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="TaskMonitor--">
+<a name="TaskMonitor-org.apache.hadoop.conf.Configuration-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TaskMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.44">TaskMonitor</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.69">TaskMonitor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 </li>
@@ -366,7 +545,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.62">get</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.84">get</a>()</pre>
 <div class="block">Get singleton instance.
  TODO this would be better off scoped to a single daemon</div>
 </li>
@@ -377,7 +556,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createStatus</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.69">createStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.91">createStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
 </li>
 </ul>
 <a name="createRPCStatus-java.lang.String-">
@@ -386,7 +565,16 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createRPCStatus</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredRPCHandler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.84">createRPCStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredRPCHandler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.106">createRPCStatus</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;description)</pre>
+</li>
+</ul>
+<a name="warnStuckTasks--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>warnStuckTasks</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.118">warnStuckTasks</a>()</pre>
 </li>
 </ul>
 <a name="purgeExpiredTasks--">
@@ -395,7 +583,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>purgeExpiredTasks</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.96">purgeExpiredTasks</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.134">purgeExpiredTasks</a>()</pre>
 </li>
 </ul>
 <a name="getTasks--">
@@ -404,7 +592,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTasks</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.122">getTasks</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.160">getTasks</a>()</pre>
 <div class="block">Produces a list containing copies of the current state of all non-expired 
  MonitoredTasks handled by this TaskMonitor.</div>
 <dl>
@@ -419,16 +607,25 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>canPurge</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.140">canPurge</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;stat)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.178">canPurge</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;stat)</pre>
 </li>
 </ul>
 <a name="dumpAsText-java.io.PrintWriter-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>dumpAsText</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.146">dumpAsText</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.183">dumpAsText</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out)</pre>
+</li>
+</ul>
+<a name="shutdown--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shutdown</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/monitoring/TaskMonitor.html#line.204">shutdown</a>()</pre>
 </li>
 </ul>
 </li>
@@ -460,7 +657,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/monitoring/StateDumpServlet.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/monitoring/TaskMonitor.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/class-use/TaskMonitor.MonitorRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/class-use/TaskMonitor.MonitorRunnable.html b/devapidocs/org/apache/hadoop/hbase/monitoring/class-use/TaskMonitor.MonitorRunnable.html
new file mode 100644
index 0000000..35667fa
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/class-use/TaskMonitor.MonitorRunnable.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.monitoring.TaskMonitor.MonitorRunnable (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.monitoring.TaskMonitor.MonitorRunnable (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring">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/monitoring/class-use/TaskMonitor.MonitorRunnable.html" target="_top">Frames</a></li>
+<li><a href="TaskMonitor.MonitorRunnable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.monitoring.TaskMonitor.MonitorRunnable" class="title">Uses of Class<br>org.apache.hadoop.hbase.monitoring.TaskMonitor.MonitorRunnable</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.monitoring.TaskMonitor.MonitorRunnable</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring">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/monitoring/class-use/TaskMonitor.MonitorRunnable.html" target="_top">Frames</a></li>
+<li><a href="TaskMonitor.MonitorRunnable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-summary.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-summary.html
index ed07796..2335c9e 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-summary.html
@@ -143,21 +143,21 @@
 <div class="block">Singleton which keeps track of tasks going on in this VM.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.PassthroughInvocationHandler</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">An InvocationHandler that simply passes through calls to the original 
  object.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring">TaskMonitor.TaskAndWeakRefPair</a></td>
 <td class="colLast">
 <div class="block">This class encapsulates an object as well as a weak reference to a proxy
  that passes through calls to that object.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/monitoring/ThreadMonitoring.html" title="class in org.apache.hadoop.hbase.monitoring">ThreadMonitoring</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 9b46a56..aa3a0b3 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -99,6 +99,7 @@
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.MonitorRunnable.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.MonitorRunnable</span></a> (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.PassthroughInvocationHandler.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.PassthroughInvocationHandler</span></a>&lt;T&gt; (implements java.lang.reflect.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/InvocationHandler.html?is-external=true" title="class or interface in java.lang.reflect">InvocationHandler</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskAndWeakRefPair.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskAndWeakRefPair</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/ThreadMonitoring.html" title="class in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">ThreadMonitoring</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 a7ee5e1..950afcd 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -422,16 +422,16 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.Modify</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.Modify</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ProcedureState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index c8ea7a7..9e17275 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -201,11 +201,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockInfo.LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockInfo.LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockInfo.ResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockInfo.ResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockInfo.LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockInfo.LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/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 5bea5e9..a020011 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -201,13 +201,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaSnapshotStore.ViolationState.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaSnapshotStore.ViolationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</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="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaSnapshotStore.ViolationState.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaSnapshotStore.ViolationState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
index c1b75fa..d7ed96d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MobStoreScanner.html
@@ -188,7 +188,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanne
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreScanner</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">store</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PA
 RALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PREAD_MAX_BYTES">STORESCANNER_PREAD_MAX_BYTES</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#currentScanners">currentScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK">HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#heap">heap</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#LAZY_SEEK_ENABLED_BY_DEFAULT">LAZY_SEEK_ENABLED_BY_DEFAULT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#prevCell">prevCell</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#readPt">readPt</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#store">st
 ore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PARALLEL_SEEK_ENABLE">STORESCANNER_PARALLEL_SEEK_ENABLE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.html#STORESCANNER_PREAD_MAX_BYTES">STORESCANNER_PREAD_MAX_BYTES</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.regionserver.KeyValueScanner">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/NoLimitScannerContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/NoLimitScannerContext.html b/devapidocs/org/apache/hadoop/hbase/regionserver/NoLimitScannerContext.html
index 742bed6..dd040e9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/NoLimitScannerContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/NoLimitScannerContext.html
@@ -280,7 +280,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerCont
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getBatchLimit--">getBatchLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getBatchProgress--">getBatchProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getDataSizeLimit--">getDataSizeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getDataSizeProgress--">getDataSizeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getHeapSizeProgress--">getHeapSizeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getKeepProgress--">getKeepProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getMetrics--">getMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getPeekedCellInHeartbeat--">getPeekedCellInHeartbeat</a>,
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getTimeLimit--">getTimeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getTimeProgress--">getTimeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasAnyLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasAnyLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasBatchLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasBatchLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasSizeLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasSizeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasTimeLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasTimeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regi
 onserver/ScannerContext.html#incrementBatchProgress-int-">incrementBatchProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#incrementSizeProgress-long-long-">incrementSizeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#isTrackingMetrics--">isTrackingMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#mayHaveMoreCellsInRow--">mayHaveMoreCellsInRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#newBuilder--">newBuilder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#newBuilder-boolean-">newBuilder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#setPeekedCellInHeartbeat-org.apache.hadoop.hbase.Cell-">setPeekedCellInHeartbeat</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#toString--">toString</a></code></l
 i>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getBatchLimit--">getBatchLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getBatchProgress--">getBatchProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getDataSizeLimit--">getDataSizeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getDataSizeProgress--">getDataSizeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getHeapSizeProgress--">getHeapSizeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getKeepProgress--">getKeepProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getLastPeekedCell--">getLastPeekedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getMetrics--">getMetrics</a>, <a href="../.
 ./../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getTimeLimit--">getTimeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getTimeProgress--">getTimeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasAnyLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasAnyLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasBatchLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasBatchLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasSizeLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasSizeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#hasTimeLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">hasTimeLimit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Scann
 erContext.html#incrementBatchProgress-int-">incrementBatchProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#incrementSizeProgress-long-long-">incrementSizeProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#isTrackingMetrics--">isTrackingMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#mayHaveMoreCellsInRow--">mayHaveMoreCellsInRow</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#newBuilder--">newBuilder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#newBuilder-boolean-">newBuilder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#setLastPeekedCell-org.apache.hadoop.hbase.Cell-">setLastPeekedCell</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#toString--">toString</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/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
index 4ce5a6e..37a2235 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1129">RSRpcServices.LogDelegate</a></pre>
+<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1126">RSRpcServices.LogDelegate</a></pre>
 </li>
 </ul>
 </div>
@@ -150,7 +150,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logBatchWarning</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html#line.1130">logBatchWarning</a>(int&nbsp;sum,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.LogDelegate.html#line.1127">logBatchWarning</a>(int&nbsp;sum,
                      int&nbsp;rowSizeWarnThreshold)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
index 7de26bb..b6c32b6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.317">RSRpcServices.RegionScannerCloseCallBack</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.314">RSRpcServices.RegionScannerCloseCallBack</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">An Rpc callback for closing a RegionScanner.</div>
@@ -209,7 +209,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>scanner</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.319">scanner</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.316">scanner</a></pre>
 </li>
 </ul>
 </li>
@@ -226,7 +226,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannerCloseCallBack</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.321">RegionScannerCloseCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.318">RegionScannerCloseCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner)</pre>
 </li>
 </ul>
 </li>
@@ -243,7 +243,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.326">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.323">run</a>()
          throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run--">RpcCallback</a></code></span></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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
index 13c9097..dc81296 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.383">RSRpcServices.RegionScannerHolder</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.380">RSRpcServices.RegionScannerHolder</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.</div>
 </li>
@@ -239,7 +239,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextCallSeq</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.385">nextCallSeq</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.382">nextCallSeq</a></pre>
 </li>
 </ul>
 <a name="scannerName">
@@ -248,7 +248,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerName</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.386">scannerName</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.383">scannerName</a></pre>
 </li>
 </ul>
 <a name="s">
@@ -257,7 +257,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>s</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.387">s</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.384">s</a></pre>
 </li>
 </ul>
 <a name="r">
@@ -266,7 +266,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>r</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.388">r</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.385">r</a></pre>
 </li>
 </ul>
 <a name="closeCallBack">
@@ -275,7 +275,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>closeCallBack</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.389">closeCallBack</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.386">closeCallBack</a></pre>
 </li>
 </ul>
 <a name="shippedCallback">
@@ -284,7 +284,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>shippedCallback</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.390">shippedCallback</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.387">shippedCallback</a></pre>
 </li>
 </ul>
 <a name="rowOfLastPartialResult">
@@ -293,7 +293,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rowOfLastPartialResult</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.391">rowOfLastPartialResult</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.388">rowOfLastPartialResult</a></pre>
 </li>
 </ul>
 <a name="needCursor">
@@ -302,7 +302,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>needCursor</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.392">needCursor</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.389">needCursor</a></pre>
 </li>
 </ul>
 </li>
@@ -319,7 +319,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannerHolder</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.394">RegionScannerHolder</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.391">RegionScannerHolder</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;s,
                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r,
                            <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a>&nbsp;closeCallBack,
@@ -341,7 +341,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextCallSeq</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.404">getNextCallSeq</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.401">getNextCallSeq</a>()</pre>
 </li>
 </ul>
 <a name="incNextCallSeq-long-">
@@ -350,7 +350,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>incNextCallSeq</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.408">incNextCallSeq</a>(long&nbsp;currentSeq)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.405">incNextCallSeq</a>(long&nbsp;currentSeq)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
index d066197..b6816ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.334">RSRpcServices.RegionScannerShippedCallBack</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.331">RSRpcServices.RegionScannerShippedCallBack</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">An Rpc callback for doing shipped() call on a RegionScanner.</div>
@@ -219,7 +219,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerName</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.336">scannerName</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.333">scannerName</a></pre>
 </li>
 </ul>
 <a name="scanner">
@@ -228,7 +228,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>scanner</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.337">scanner</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.334">scanner</a></pre>
 </li>
 </ul>
 <a name="lease">
@@ -237,7 +237,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lease</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.338">lease</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.335">lease</a></pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannerShippedCallBack</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.340">RegionScannerShippedCallBack</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.337">RegionScannerShippedCallBack</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;scanner,
                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.Lease.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.Lease</a>&nbsp;lease)</pre>
 </li>
@@ -273,7 +273,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.347">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.344">run</a>()
          throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run--">RpcCallback</a></code></span></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>


[35/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.html
index 441cb10..9e7d320 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ScannerContext.html
@@ -115,7 +115,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.LimitedPrivate</a>(<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html#value--">value</a>="Coprocesssor")
  <a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Evolving</a>
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.54">ScannerContext</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.52">ScannerContext</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">ScannerContext instances encapsulate limit tracking AND progress towards those limits during
  invocations of <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(java.util.List)</code></a> and
@@ -210,21 +210,21 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#lastPeekedCell">lastPeekedCell</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#limits">limits</a></span></code>
 <div class="block">Two sets of the same fields.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ServerSideScanMetrics</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#metrics">metrics</a></span></code>
 <div class="block">Tracks the relevant server side metrics during scans.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#peekedCellInHeartbeat">peekedCellInHeartbeat</a></span></code>&nbsp;</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#progress">progress</a></span></code>&nbsp;</td>
@@ -317,15 +317,15 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getKeepProgress--">getKeepProgress</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i11" class="rowColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getLastPeekedCell--">getLastPeekedCell</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ServerSideScanMetrics</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getMetrics--">getMetrics</a></span>()</code>
 <div class="block">Get the metrics instance.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getPeekedCellInHeartbeat--">getPeekedCellInHeartbeat</a></span>()</code>&nbsp;</td>
-</tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#getTimeLimit--">getTimeLimit</a></span>()</code>&nbsp;</td>
@@ -388,8 +388,8 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#setKeepProgress-boolean-">setKeepProgress</a></span>(boolean&nbsp;keepProgress)</code>&nbsp;</td>
 </tr>
 <tr id="i27" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#setPeekedCellInHeartbeat-org.apache.hadoop.hbase.Cell-">setPeekedCellInHeartbeat</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;peekedCellInHeartbeat)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#setLastPeekedCell-org.apache.hadoop.hbase.Cell-">setLastPeekedCell</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;lastPeekedCell)</code>&nbsp;</td>
 </tr>
 <tr id="i28" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
@@ -459,7 +459,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>limits</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.59">limits</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.57">limits</a></pre>
 <div class="block">Two sets of the same fields. One for the limits, another for the progress towards those limits</div>
 </li>
 </ul>
@@ -469,7 +469,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>progress</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.60">progress</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.58">progress</a></pre>
 </li>
 </ul>
 <a name="scannerState">
@@ -478,7 +478,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerState</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.66">scannerState</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.64">scannerState</a></pre>
 <div class="block">The state of the scanner after the invocation of <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(java.util.List)</code></a>
  or <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(java.util.List)</code></a>.</div>
 </li>
@@ -489,7 +489,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATE</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.67">DEFAULT_STATE</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.65">DEFAULT_STATE</a></pre>
 </li>
 </ul>
 <a name="keepProgress">
@@ -498,7 +498,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>keepProgress</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.97">keepProgress</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.95">keepProgress</a></pre>
 <div class="block">Used as an indication to invocations of <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(java.util.List)</code></a> and
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-"><code>InternalScanner.next(java.util.List)</code></a> that, if true, the progress tracked within this
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver"><code>ScannerContext</code></a> instance should be considered while evaluating the limits. Useful for
@@ -533,16 +533,16 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_KEEP_PROGRESS</h4>
-<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.98">DEFAULT_KEEP_PROGRESS</a></pre>
+<pre>private static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.96">DEFAULT_KEEP_PROGRESS</a></pre>
 </li>
 </ul>
-<a name="peekedCellInHeartbeat">
+<a name="lastPeekedCell">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>peekedCellInHeartbeat</h4>
-<pre>private&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/ScannerContext.html#line.100">peekedCellInHeartbeat</a></pre>
+<h4>lastPeekedCell</h4>
+<pre>private&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/ScannerContext.html#line.98">lastPeekedCell</a></pre>
 </li>
 </ul>
 <a name="metrics">
@@ -551,7 +551,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>metrics</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ServerSideScanMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.105">metrics</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ServerSideScanMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.103">metrics</a></pre>
 <div class="block">Tracks the relevant server side metrics during scans. null when metrics should not be tracked</div>
 </li>
 </ul>
@@ -569,7 +569,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ScannerContext</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.107">ScannerContext</a>(boolean&nbsp;keepProgress,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.105">ScannerContext</a>(boolean&nbsp;keepProgress,
                <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitFields.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitFields</a>&nbsp;limitsToCopy,
                boolean&nbsp;trackMetrics)</pre>
 </li>
@@ -588,7 +588,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isTrackingMetrics</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.119">isTrackingMetrics</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.117">isTrackingMetrics</a>()</pre>
 </li>
 </ul>
 <a name="getMetrics--">
@@ -597,7 +597,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetrics</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ServerSideScanMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.128">getMetrics</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ServerSideScanMetrics</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.126">getMetrics</a>()</pre>
 <div class="block">Get the metrics instance. Should only be called after a call to <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html#isTrackingMetrics--"><code>isTrackingMetrics()</code></a>
  has been made to confirm that metrics are indeed being tracked.</div>
 <dl>
@@ -612,7 +612,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getKeepProgress</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.139">getKeepProgress</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.137">getKeepProgress</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the progress tracked so far in this instance will be considered during an
@@ -628,7 +628,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setKeepProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.143">setKeepProgress</a>(boolean&nbsp;keepProgress)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.141">setKeepProgress</a>(boolean&nbsp;keepProgress)</pre>
 </li>
 </ul>
 <a name="incrementBatchProgress-int-">
@@ -637,7 +637,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementBatchProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.150">incrementBatchProgress</a>(int&nbsp;batch)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.148">incrementBatchProgress</a>(int&nbsp;batch)</pre>
 <div class="block">Progress towards the batch limit has been made. Increment internal tracking of batch progress</div>
 </li>
 </ul>
@@ -647,7 +647,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSizeProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.158">incrementSizeProgress</a>(long&nbsp;dataSize,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.156">incrementSizeProgress</a>(long&nbsp;dataSize,
                            long&nbsp;heapSize)</pre>
 <div class="block">Progress towards the size limit has been made. Increment internal tracking of size progress</div>
 </li>
@@ -658,7 +658,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>updateTimeProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.168">updateTimeProgress</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.166">updateTimeProgress</a>()</pre>
 <div class="block">Update the time progress with <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#currentTimeMillis--" title="class or interface in java.lang"><code>System.currentTimeMillis()</code></a></div>
 </li>
 </ul>
@@ -668,7 +668,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatchProgress</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.172">getBatchProgress</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.170">getBatchProgress</a>()</pre>
 </li>
 </ul>
 <a name="getDataSizeProgress--">
@@ -677,7 +677,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataSizeProgress</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.176">getDataSizeProgress</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.174">getDataSizeProgress</a>()</pre>
 </li>
 </ul>
 <a name="getHeapSizeProgress--">
@@ -686,7 +686,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeapSizeProgress</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.180">getHeapSizeProgress</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.178">getHeapSizeProgress</a>()</pre>
 </li>
 </ul>
 <a name="getTimeProgress--">
@@ -695,7 +695,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeProgress</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.184">getTimeProgress</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.182">getTimeProgress</a>()</pre>
 </li>
 </ul>
 <a name="setProgress-int-long-long-long-">
@@ -704,7 +704,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.188">setProgress</a>(int&nbsp;batchProgress,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.186">setProgress</a>(int&nbsp;batchProgress,
                  long&nbsp;sizeProgress,
                  long&nbsp;heapSizeProgress,
                  long&nbsp;timeProgress)</pre>
@@ -716,7 +716,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setSizeProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.194">setSizeProgress</a>(long&nbsp;dataSizeProgress,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.192">setSizeProgress</a>(long&nbsp;dataSizeProgress,
                      long&nbsp;heapSizeProgress)</pre>
 </li>
 </ul>
@@ -726,7 +726,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setBatchProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.199">setBatchProgress</a>(int&nbsp;batchProgress)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.197">setBatchProgress</a>(int&nbsp;batchProgress)</pre>
 </li>
 </ul>
 <a name="setTimeProgress-long-">
@@ -735,7 +735,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.203">setTimeProgress</a>(long&nbsp;timeProgress)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.201">setTimeProgress</a>(long&nbsp;timeProgress)</pre>
 </li>
 </ul>
 <a name="clearProgress--">
@@ -744,7 +744,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>clearProgress</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.211">clearProgress</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.209">clearProgress</a>()</pre>
 <div class="block">Clear away any progress that has been made so far. All progress fields are reset to initial
  values</div>
 </li>
@@ -755,7 +755,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setScannerState</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.223">setScannerState</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;state)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.221">setScannerState</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.NextState</a>&nbsp;state)</pre>
 <div class="block">Note that this is not a typical setter. This setter returns the <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><code>ScannerContext.NextState</code></a> that was
  passed in so that methods can be invoked against the new state. Furthermore, this pattern
  allows the <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoLimitScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver"><code>NoLimitScannerContext</code></a> to cleanly override this setter and simply return the
@@ -774,7 +774,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>mayHaveMoreCellsInRow</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.236">mayHaveMoreCellsInRow</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.234">mayHaveMoreCellsInRow</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true when we have more cells for the current row. This usually because we have reached
@@ -788,7 +788,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hasBatchLimit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.246">hasBatchLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.244">hasBatchLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - </dd>
@@ -803,7 +803,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hasSizeLimit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.254">hasSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.252">hasSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - </dd>
@@ -818,7 +818,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hasTimeLimit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.263">hasTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.261">hasTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - </dd>
@@ -833,7 +833,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hasAnyLimit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.271">hasAnyLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.269">hasAnyLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - </dd>
@@ -848,7 +848,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setSizeLimitScope</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.278">setSizeLimitScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.276">setSizeLimitScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>scope</code> - The scope in which the size limit will be enforced</dd>
@@ -861,7 +861,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeLimitScope</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.285">setTimeLimitScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.283">setTimeLimitScope</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;scope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>scope</code> - The scope in which the time limit will be enforced</dd>
@@ -874,7 +874,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatchLimit</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.289">getBatchLimit</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.287">getBatchLimit</a>()</pre>
 </li>
 </ul>
 <a name="getDataSizeLimit--">
@@ -883,7 +883,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataSizeLimit</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.293">getDataSizeLimit</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.291">getDataSizeLimit</a>()</pre>
 </li>
 </ul>
 <a name="getTimeLimit--">
@@ -892,7 +892,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeLimit</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.297">getTimeLimit</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.295">getTimeLimit</a>()</pre>
 </li>
 </ul>
 <a name="checkBatchLimit-org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope-">
@@ -901,7 +901,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>checkBatchLimit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.305">checkBatchLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.303">checkBatchLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - The scope that the limit is being checked from</dd>
@@ -916,7 +916,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSizeLimit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.313">checkSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.311">checkSizeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - The scope that the limit is being checked from</dd>
@@ -931,7 +931,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTimeLimit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.323">checkTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.321">checkTimeLimit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - The scope that the limit is being checked from. The time limit is always
@@ -947,7 +947,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAnyLimitReached</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.331">checkAnyLimitReached</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.329">checkAnyLimitReached</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver">ScannerContext.LimitScope</a>&nbsp;checkerScope)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>checkerScope</code> - The scope that the limits are being checked from</dd>
@@ -956,22 +956,22 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
-<a name="getPeekedCellInHeartbeat--">
+<a name="getLastPeekedCell--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getPeekedCellInHeartbeat</h4>
-<pre>public&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/ScannerContext.html#line.336">getPeekedCellInHeartbeat</a>()</pre>
+<h4>getLastPeekedCell</h4>
+<pre><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/ScannerContext.html#line.334">getLastPeekedCell</a>()</pre>
 </li>
 </ul>
-<a name="setPeekedCellInHeartbeat-org.apache.hadoop.hbase.Cell-">
+<a name="setLastPeekedCell-org.apache.hadoop.hbase.Cell-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setPeekedCellInHeartbeat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.340">setPeekedCellInHeartbeat</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;peekedCellInHeartbeat)</pre>
+<h4>setLastPeekedCell</h4>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.338">setLastPeekedCell</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;lastPeekedCell)</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -980,7 +980,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.345">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.343">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -993,7 +993,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>newBuilder</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.365">newBuilder</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.363">newBuilder</a>()</pre>
 </li>
 </ul>
 <a name="newBuilder-boolean-">
@@ -1002,7 +1002,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>newBuilder</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.369">newBuilder</a>(boolean&nbsp;keepProgress)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.Builder.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext.Builder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/ScannerContext.html#line.367">newBuilder</a>(boolean&nbsp;keepProgress)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
index 7f74780..f03a1c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.162">StoreScanner.StoreScannerCompactionRace</a>
+<pre>static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.html#line.161">StoreScanner.StoreScannerCompactionRace</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>&gt;</pre>
 </li>
 </ul>
@@ -213,7 +213,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>BEFORE_SEEK</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.163">BEFORE_SEEK</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.162">BEFORE_SEEK</a></pre>
 </li>
 </ul>
 <a name="AFTER_SEEK">
@@ -222,7 +222,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>AFTER_SEEK</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.164">AFTER_SEEK</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.163">AFTER_SEEK</a></pre>
 </li>
 </ul>
 <a name="COMPACT_COMPLETE">
@@ -231,7 +231,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>COMPACT_COMPLETE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.165">COMPACT_COMPLETE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.164">COMPACT_COMPLETE</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.162">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.161">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -268,7 +268,7 @@ for (StoreScanner.StoreScannerCompactionRace c : StoreScanner.StoreScannerCompac
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.162">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver">StoreScanner.StoreScannerCompactionRace</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html#line.161">valueOf</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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 


[46/46] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.


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

Branch: refs/heads/asf-site
Commit: 47be635d181b64a0d68e0b0fa4b011b2b3d15158
Parents: 8d17471
Author: jenkins <bu...@apache.org>
Authored: Thu Aug 10 15:05:51 2017 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Aug 10 15:05:51 2017 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    6 +-
 apidocs/index-all.html                          |    6 +-
 .../RawScanResultConsumer.ScanController.html   |   44 +-
 .../RawScanResultConsumer.ScanResumer.html      |    4 +-
 .../hbase/client/RawScanResultConsumer.html     |   14 +-
 .../hadoop/hbase/client/class-use/Cursor.html   |   15 +
 .../hadoop/hbase/client/package-summary.html    |    2 +-
 .../apache/hadoop/hbase/client/package-use.html |    2 +-
 .../RawScanResultConsumer.ScanController.html   |  208 +-
 .../RawScanResultConsumer.ScanResumer.html      |  208 +-
 .../hbase/client/RawScanResultConsumer.html     |  208 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       | 5672 ++++++++-------
 checkstyle.rss                                  |   12 +-
 coc.html                                        |    4 +-
 cygwin.html                                     |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |   60 +-
 devapidocs/index-all.html                       |   74 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../org/apache/hadoop/hbase/class-use/Cell.html |   40 +-
 .../class-use/InterfaceAudience.Public.html     |    2 +-
 .../hbase/classification/package-tree.html      |    6 +-
 ...ionRpcRetryingCaller.ScanControllerImpl.html |   74 +-
 ...onRpcRetryingCaller.ScanControllerState.html |   14 +-
 ...RegionRpcRetryingCaller.ScanResumerImpl.html |   20 +-
 ...egionRpcRetryingCaller.ScanResumerState.html |   12 +-
 .../AsyncScanSingleRegionRpcRetryingCaller.html |   88 +-
 .../RawScanResultConsumer.ScanController.html   |   44 +-
 .../RawScanResultConsumer.ScanResumer.html      |    4 +-
 .../hbase/client/RawScanResultConsumer.html     |   14 +-
 .../hadoop/hbase/client/class-use/Cursor.html   |   32 +
 .../hadoop/hbase/client/package-summary.html    |    2 +-
 .../hadoop/hbase/client/package-tree.html       |   26 +-
 .../apache/hadoop/hbase/client/package-use.html |    4 +-
 .../hadoop/hbase/filter/package-tree.html       |   10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    8 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    4 +-
 .../hbase/monitoring/MonitoredRPCHandler.html   |    2 +-
 .../monitoring/MonitoredRPCHandlerImpl.html     |    4 +-
 .../hadoop/hbase/monitoring/MonitoredTask.html  |   62 +-
 .../hbase/monitoring/MonitoredTaskImpl.html     |  115 +-
 .../monitoring/TaskMonitor.MonitorRunnable.html |  323 +
 ...askMonitor.PassthroughInvocationHandler.html |   12 +-
 .../TaskMonitor.TaskAndWeakRefPair.html         |   12 +-
 .../hadoop/hbase/monitoring/TaskMonitor.html    |  265 +-
 .../class-use/TaskMonitor.MonitorRunnable.html  |  125 +
 .../hbase/monitoring/package-summary.html       |    6 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    1 +
 .../org/apache/hadoop/hbase/package-tree.html   |   14 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    6 +-
 .../hadoop/hbase/quotas/package-tree.html       |    8 +-
 .../hbase/regionserver/MobStoreScanner.html     |    2 +-
 .../regionserver/NoLimitScannerContext.html     |    2 +-
 .../regionserver/RSRpcServices.LogDelegate.html |    4 +-
 ...SRpcServices.RegionScannerCloseCallBack.html |    8 +-
 .../RSRpcServices.RegionScannerHolder.html      |   24 +-
 ...pcServices.RegionScannerShippedCallBack.html |   12 +-
 ...RpcServices.RegionScannersCloseCallBack.html |   10 +-
 .../RSRpcServices.ScannerListener.html          |    8 +-
 .../hbase/regionserver/RSRpcServices.html       |  224 +-
 .../regionserver/ReversedMobStoreScanner.html   |    2 +-
 .../regionserver/ReversedStoreScanner.html      |    2 +-
 .../regionserver/ScannerContext.Builder.html    |   24 +-
 .../ScannerContext.LimitFields.html             |   62 +-
 .../regionserver/ScannerContext.LimitScope.html |   16 +-
 .../regionserver/ScannerContext.NextState.html  |   32 +-
 .../hbase/regionserver/ScannerContext.html      |  126 +-
 ...StoreScanner.StoreScannerCompactionRace.html |   12 +-
 .../hadoop/hbase/regionserver/StoreScanner.html |  172 +-
 .../hadoop/hbase/regionserver/package-tree.html |   16 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../hbase/regionserver/wal/package-tree.html    |    2 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../hadoop/hbase/thrift/package-tree.html       |    4 +-
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 devapidocs/overview-tree.html                   |    1 +
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 ...ionRpcRetryingCaller.ScanControllerImpl.html | 1018 +--
 ...onRpcRetryingCaller.ScanControllerState.html | 1018 +--
 ...RegionRpcRetryingCaller.ScanResumerImpl.html | 1018 +--
 ...egionRpcRetryingCaller.ScanResumerState.html | 1018 +--
 .../AsyncScanSingleRegionRpcRetryingCaller.html | 1018 +--
 .../RawScanResultConsumer.ScanController.html   |  208 +-
 .../RawScanResultConsumer.ScanResumer.html      |  208 +-
 .../hbase/client/RawScanResultConsumer.html     |  208 +-
 .../monitoring/MonitoredRPCHandlerImpl.html     |   12 +-
 .../hbase/monitoring/MonitoredTask.State.html   |   76 +-
 .../hadoop/hbase/monitoring/MonitoredTask.html  |   76 +-
 .../hbase/monitoring/MonitoredTaskImpl.html     |  300 +-
 .../monitoring/TaskMonitor.MonitorRunnable.html |  355 +
 ...askMonitor.PassthroughInvocationHandler.html |  436 +-
 .../TaskMonitor.TaskAndWeakRefPair.html         |  436 +-
 .../hadoop/hbase/monitoring/TaskMonitor.html    |  436 +-
 .../regionserver/RSRpcServices.LogDelegate.html | 6833 +++++++++---------
 ...SRpcServices.RegionScannerCloseCallBack.html | 6833 +++++++++---------
 .../RSRpcServices.RegionScannerHolder.html      | 6833 +++++++++---------
 ...pcServices.RegionScannerShippedCallBack.html | 6833 +++++++++---------
 ...RpcServices.RegionScannersCloseCallBack.html | 6833 +++++++++---------
 .../RSRpcServices.ScannerListener.html          | 6833 +++++++++---------
 .../hbase/regionserver/RSRpcServices.html       | 6833 +++++++++---------
 .../regionserver/ScannerContext.Builder.html    | 1344 ++--
 .../ScannerContext.LimitFields.html             | 1344 ++--
 .../regionserver/ScannerContext.LimitScope.html | 1344 ++--
 .../regionserver/ScannerContext.NextState.html  | 1344 ++--
 .../hbase/regionserver/ScannerContext.html      | 1344 ++--
 ...StoreScanner.StoreScannerCompactionRace.html | 2239 +++---
 .../hadoop/hbase/regionserver/StoreScanner.html | 2239 +++---
 export_control.html                             |    4 +-
 hbase-annotations/checkstyle.html               |    4 +-
 hbase-annotations/dependencies.html             |    4 +-
 hbase-annotations/dependency-convergence.html   |    4 +-
 hbase-annotations/dependency-info.html          |    4 +-
 hbase-annotations/dependency-management.html    |    4 +-
 hbase-annotations/index.html                    |    4 +-
 hbase-annotations/integration.html              |    4 +-
 hbase-annotations/issue-tracking.html           |    4 +-
 hbase-annotations/license.html                  |    4 +-
 hbase-annotations/mail-lists.html               |    4 +-
 hbase-annotations/plugin-management.html        |    4 +-
 hbase-annotations/plugins.html                  |    4 +-
 hbase-annotations/project-info.html             |    4 +-
 hbase-annotations/project-reports.html          |    4 +-
 hbase-annotations/project-summary.html          |    4 +-
 hbase-annotations/source-repository.html        |    4 +-
 hbase-annotations/team-list.html                |    4 +-
 hbase-archetypes/dependencies.html              |    4 +-
 hbase-archetypes/dependency-convergence.html    |    4 +-
 hbase-archetypes/dependency-info.html           |    4 +-
 hbase-archetypes/dependency-management.html     |    4 +-
 .../hbase-archetype-builder/dependencies.html   |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../dependency-info.html                        |    4 +-
 .../dependency-management.html                  |    4 +-
 .../hbase-archetype-builder/index.html          |    4 +-
 .../hbase-archetype-builder/integration.html    |    4 +-
 .../hbase-archetype-builder/issue-tracking.html |    4 +-
 .../hbase-archetype-builder/license.html        |    4 +-
 .../hbase-archetype-builder/mail-lists.html     |    4 +-
 .../plugin-management.html                      |    4 +-
 .../hbase-archetype-builder/plugins.html        |    4 +-
 .../hbase-archetype-builder/project-info.html   |    4 +-
 .../project-summary.html                        |    4 +-
 .../source-repository.html                      |    4 +-
 .../hbase-archetype-builder/team-list.html      |    4 +-
 .../hbase-client-project/checkstyle.html        |    4 +-
 .../hbase-client-project/dependencies.html      |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../hbase-client-project/dependency-info.html   |    4 +-
 .../dependency-management.html                  |    4 +-
 .../hbase-client-project/index.html             |    4 +-
 .../hbase-client-project/integration.html       |    4 +-
 .../hbase-client-project/issue-tracking.html    |    4 +-
 .../hbase-client-project/license.html           |    4 +-
 .../hbase-client-project/mail-lists.html        |    4 +-
 .../hbase-client-project/plugin-management.html |    4 +-
 .../hbase-client-project/plugins.html           |    4 +-
 .../hbase-client-project/project-info.html      |    4 +-
 .../hbase-client-project/project-reports.html   |    4 +-
 .../hbase-client-project/project-summary.html   |    4 +-
 .../hbase-client-project/source-repository.html |    4 +-
 .../hbase-client-project/team-list.html         |    4 +-
 .../hbase-shaded-client-project/checkstyle.html |    4 +-
 .../dependencies.html                           |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../dependency-info.html                        |    4 +-
 .../dependency-management.html                  |    4 +-
 .../hbase-shaded-client-project/index.html      |    4 +-
 .../integration.html                            |    4 +-
 .../issue-tracking.html                         |    4 +-
 .../hbase-shaded-client-project/license.html    |    4 +-
 .../hbase-shaded-client-project/mail-lists.html |    4 +-
 .../plugin-management.html                      |    4 +-
 .../hbase-shaded-client-project/plugins.html    |    4 +-
 .../project-info.html                           |    4 +-
 .../project-reports.html                        |    4 +-
 .../project-summary.html                        |    4 +-
 .../source-repository.html                      |    4 +-
 .../hbase-shaded-client-project/team-list.html  |    4 +-
 hbase-archetypes/index.html                     |    4 +-
 hbase-archetypes/integration.html               |    4 +-
 hbase-archetypes/issue-tracking.html            |    4 +-
 hbase-archetypes/license.html                   |    4 +-
 hbase-archetypes/mail-lists.html                |    4 +-
 hbase-archetypes/plugin-management.html         |    4 +-
 hbase-archetypes/plugins.html                   |    4 +-
 hbase-archetypes/project-info.html              |    4 +-
 hbase-archetypes/project-summary.html           |    4 +-
 hbase-archetypes/source-repository.html         |    4 +-
 hbase-archetypes/team-list.html                 |    4 +-
 hbase-spark/checkstyle.html                     |    4 +-
 hbase-spark/dependencies.html                   |    4 +-
 hbase-spark/dependency-convergence.html         |    4 +-
 hbase-spark/dependency-info.html                |    4 +-
 hbase-spark/dependency-management.html          |    4 +-
 hbase-spark/index.html                          |    4 +-
 hbase-spark/integration.html                    |    4 +-
 hbase-spark/issue-tracking.html                 |    4 +-
 hbase-spark/license.html                        |    4 +-
 hbase-spark/mail-lists.html                     |    4 +-
 hbase-spark/plugin-management.html              |    4 +-
 hbase-spark/plugins.html                        |    4 +-
 hbase-spark/project-info.html                   |    4 +-
 hbase-spark/project-reports.html                |    4 +-
 hbase-spark/project-summary.html                |    4 +-
 hbase-spark/source-repository.html              |    4 +-
 hbase-spark/team-list.html                      |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |  208 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    6 +-
 testdevapidocs/allclasses-noframe.html          |    6 +-
 testdevapidocs/constant-values.html             |   38 +-
 testdevapidocs/index-all.html                   |  132 +-
 .../hbase/class-use/HBaseTestingUtility.html    |  222 +-
 .../client/AbstractTestAsyncTableScan.html      |    4 +-
 .../AbstractTestScanCursor.SparseFilter.html    |  391 +
 .../hbase/client/AbstractTestScanCursor.html    |  619 ++
 .../hadoop/hbase/client/AbstractTestShell.html  |    4 +-
 ...IntoShippedBlocks.CompactorStoreScanner.html |    2 +-
 ...onInReseekRegionObserver.MyStoreScanner.html |    2 +-
 .../hadoop/hbase/client/TestPutWriteToWal.html  |    4 +-
 .../hbase/client/TestRawAsyncScanCursor.html    |  367 +
 .../TestRawAsyncTableLimitedScanWithFilter.html |    4 +-
 .../apache/hadoop/hbase/client/TestScan.html    |    4 +-
 .../hadoop/hbase/client/TestScanCursor.html     |  355 +
 .../client/TestScannersFromClientSide.html      |    4 +-
 .../AbstractTestScanCursor.SparseFilter.html    |  125 +
 .../class-use/AbstractTestScanCursor.html       |  169 +
 .../class-use/TestRawAsyncScanCursor.html       |  125 +
 .../hbase/client/class-use/TestScanCursor.html  |  125 +
 .../hadoop/hbase/client/package-frame.html      |    4 +
 .../hadoop/hbase/client/package-summary.html    |   54 +-
 .../hadoop/hbase/client/package-tree.html       |    7 +
 .../apache/hadoop/hbase/client/package-use.html |   47 +-
 .../hbase/monitoring/TestTaskMonitor.html       |   34 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/regionserver/TestScanner.html  |    4 +-
 .../TestScannerCursor.SparseFilter.html         |  350 -
 .../hbase/regionserver/TestScannerCursor.html   |  638 --
 .../TestScannerHeartbeatMessages.html           |    4 +-
 .../TestStoreScanner.CellGridStoreScanner.html  |    2 +-
 ....CellWithVersionsNoOptimizeStoreScanner.html |    2 +-
 ...oreScanner.CellWithVersionsStoreScanner.html |    2 +-
 .../TestScannerCursor.SparseFilter.html         |  125 -
 .../class-use/TestScannerCursor.html            |  125 -
 .../hbase/regionserver/package-frame.html       |    2 -
 .../hbase/regionserver/package-summary.html     |    8 -
 .../hadoop/hbase/regionserver/package-tree.html |    8 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    4 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 testdevapidocs/overview-tree.html               |    9 +-
 .../AbstractTestScanCursor.SparseFilter.html    |  218 +
 .../hbase/client/AbstractTestScanCursor.html    |  218 +
 .../hbase/client/TestRawAsyncScanCursor.html    |  179 +
 .../hadoop/hbase/client/TestScanCursor.html     |  162 +
 .../hbase/monitoring/TestTaskMonitor.html       |  226 +-
 .../TestScannerCursor.SparseFilter.html         |  263 -
 .../hbase/regionserver/TestScannerCursor.html   |  263 -
 284 files changed, 42350 insertions(+), 39597 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index aeaa904..860277d 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="20170809" />
+    <meta name="Date-Revision-yyyymmdd" content="20170810" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -606,7 +606,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-08-09</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-08-10</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index f89b0fc..2ba9414 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20170809184114+00'00')
-/CreationDate (D:20170809184114+00'00')
+/ModDate (D:20170810144502+00'00')
+/CreationDate (D:20170810144502+00'00')
 >>
 endobj
 2 0 obj
@@ -27334,7 +27334,7 @@ endobj
 endobj
 136 0 obj
 << /Limits [(__anchor-top) (adding.new.node)]
-/Names [(__anchor-top) 25 0 R (__indexterm-6955510) 3262 0 R (__indexterm-6957760) 3264 0 R (__indexterm-6959822) 3265 0 R (__indexterm-6961696) 3266 0 R (acid) 891 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3361 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3362 0 R (add.metrics) 3359 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3596 0 R (adding.new.node) 2859 0 R]
+/Names [(__anchor-top) 25 0 R (__indexterm-6955508) 3262 0 R (__indexterm-6957758) 3264 0 R (__indexterm-6959820) 3265 0 R (__indexterm-6961694) 3266 0 R (acid) 891 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3361 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3362 0 R (add.metrics) 3359 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3596 0 R (adding.new.node) 2859 0 R]
 >>
 endobj
 137 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 209ec91..0dc7f76 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -2719,6 +2719,10 @@
  <a href="org/apache/hadoop/hbase/client/Result.html#isCursor--"><code>Result.isCursor()</code></a>
  <a href="org/apache/hadoop/hbase/client/Result.html#getCursor--"><code>Result.getCursor()</code></a></div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">cursor()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></dt>
+<dd>
+<div class="block">Get the scan cursor if available.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/Constants.html#CUSTOM_FILTERS">CUSTOM_FILTERS</a></span> - Static variable in interface org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/Constants.html" title="interface in org.apache.hadoop.hbase.rest">Constants</a></dt>
 <dd>&nbsp;</dd>
 </dl>
@@ -12687,7 +12691,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client"><span class="typeNameLink">RawScanResultConsumer.ScanController</span></a> - Interface in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </dd>
 <dt><a href="org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client"><span class="typeNameLink">RawScanResultConsumer.ScanResumer</span></a> - Interface in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>
 <dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html b/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
index aa9f8f6..551a67d 100644
--- a/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
+++ b/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6};
+var methods = {"i0":6,"i1":6,"i2":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -106,15 +106,15 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.60">RawScanResultConsumer.ScanController</a></pre>
-<div class="block">Used to suspend or stop a scan.
+public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.62">RawScanResultConsumer.ScanController</a></pre>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.
  <p>
- Notice that, you should only call the methods below inside onNext or onHeartbeat method. A
- IllegalStateException will be thrown if you call them at other places.
+ Notice that, you should only call the <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#suspend--"><code>suspend()</code></a> or <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#terminate--"><code>terminate()</code></a> inside onNext
+ or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.
  <p>
- You can only call one of the methods below, i.e., call suspend or terminate(of course you are
- free to not call them both), and the methods are not reentrant. A IllegalStateException will be
- thrown if you have already called one of the methods.</div>
+ You can only call one of the <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#suspend--"><code>suspend()</code></a> and <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#terminate--"><code>terminate()</code></a> methods(of course you
+ are free to not call them both), and the methods are not reentrant. An IllegalStateException
+ will be thrown if you have already called one of the methods.</div>
 </li>
 </ul>
 </div>
@@ -134,12 +134,18 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">cursor</a></span>()</code>
+<div class="block">Get the scan cursor if available.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#suspend--">suspend</a></span>()</code>
 <div class="block">Suspend the scan.</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#terminate--">terminate</a></span>()</code>
 <div class="block">Terminate the scan.</div>
@@ -166,7 +172,7 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <ul class="blockList">
 <li class="blockList">
 <h4>suspend</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.69">suspend</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanResumer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.71">suspend</a>()</pre>
 <div class="block">Suspend the scan.
  <p>
  This means we will stop fetching data in background, i.e., will not call onNext any more
@@ -180,16 +186,30 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <a name="terminate--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>terminate</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.77">terminate</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.79">terminate</a>()</pre>
 <div class="block">Terminate the scan.
  <p>
  This is useful when you have got enough results and want to stop the scan in onNext method,
  or you want to stop the scan in onHeartbeat method because it has spent too many time.</div>
 </li>
 </ul>
+<a name="cursor--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>cursor</h4>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#line.85">cursor</a>()</pre>
+<div class="block">Get the scan cursor if available.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The scan cursor.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html b/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
index 00a65ba..da5dec0 100644
--- a/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
+++ b/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
@@ -106,7 +106,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.40">RawScanResultConsumer.ScanResumer</a></pre>
+public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.42">RawScanResultConsumer.ScanResumer</a></pre>
 <div class="block">Used to resume a scan.</div>
 </li>
 </ul>
@@ -153,7 +153,7 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <ul class="blockListLast">
 <li class="blockList">
 <h4>resume</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html#line.46">resume</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html#line.48">resume</a>()</pre>
 <div class="block">Resume the scan. You are free to call it multiple time but only the first call will take
  effect.</div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html b/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
index 8993ca2..fbf7f4d 100644
--- a/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
+++ b/apidocs/org/apache/hadoop/hbase/client/RawScanResultConsumer.html
@@ -102,7 +102,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.34">RawScanResultConsumer</a></pre>
+public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.36">RawScanResultConsumer</a></pre>
 <div class="block">Receives <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client"><code>Result</code></a> for an asynchronous scan.
  <p>
  Notice that, the <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html#onNext-org.apache.hadoop.hbase.client.Result:A-org.apache.hadoop.hbase.client.RawScanResultConsumer.ScanController-"><code>onNext(Result[], ScanController)</code></a> method will be called in the thread
@@ -131,7 +131,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <tr class="altColor">
 <td class="colFirst"><code>static interface&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></span></code>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -210,7 +210,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onNext</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.87">onNext</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;results,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.95">onNext</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&nbsp;results,
             <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>&nbsp;controller)</pre>
 <div class="block">Indicate that we have receive some data.</div>
 <dl>
@@ -228,7 +228,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onHeartbeat</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.98">onHeartbeat</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>&nbsp;controller)</pre>
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.106">onHeartbeat</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>&nbsp;controller)</pre>
 <div class="block">Indicate that there is an heartbeat message but we have not cumulated enough cells to call
  onNext.
  <p>
@@ -247,7 +247,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.106">onError</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.114">onError</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 <div class="block">Indicate that we hit an unrecoverable error and the scan operation is terminated.
  <p>
  We will not call <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html#onComplete--"><code>onComplete()</code></a> after calling <a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.html#onError-java.lang.Throwable-"><code>onError(Throwable)</code></a>.</div>
@@ -259,7 +259,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockList">
 <li class="blockList">
 <h4>onComplete</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.111">onComplete</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.119">onComplete</a>()</pre>
 <div class="block">Indicate that the scan operation is completed normally.</div>
 </li>
 </ul>
@@ -269,7 +269,7 @@ public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/client
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onScanMetricsCreated</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.119">onScanMetricsCreated</a>(org.apache.hadoop.hbase.client.metrics.ScanMetrics&nbsp;scanMetrics)</pre>
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.html#line.127">onScanMetricsCreated</a>(org.apache.hadoop.hbase.client.metrics.ScanMetrics&nbsp;scanMetrics)</pre>
 <div class="block">If <code>scan.isScanMetricsEnabled()</code> returns true, then this method will be called prior to
  all other methods in this interface to give you the <code>ScanMetrics</code> instance for this scan
  operation. The <code>ScanMetrics</code> instance will be updated on-the-fly during the scan, you can

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html b/apidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
index b10a9c7..8b33f72 100644
--- a/apidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
+++ b/apidocs/org/apache/hadoop/hbase/client/class-use/Cursor.html
@@ -113,6 +113,21 @@
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a> that return types with arguments of type <a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">RawScanResultConsumer.ScanController.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html#cursor--">cursor</a></span>()</code>
+<div class="block">Get the scan cursor if available.</div>
+</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
 <caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/client/Cursor.html" title="class in org.apache.hadoop.hbase.client">Cursor</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/org/apache/hadoop/hbase/client/package-summary.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/package-summary.html b/apidocs/org/apache/hadoop/hbase/client/package-summary.html
index df746ac..17a8670 100644
--- a/apidocs/org/apache/hadoop/hbase/client/package-summary.html
+++ b/apidocs/org/apache/hadoop/hbase/client/package-summary.html
@@ -192,7 +192,7 @@
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html" title="interface in org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a></td>
 <td class="colLast">
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="altColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/org/apache/hadoop/hbase/client/package-use.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/package-use.html b/apidocs/org/apache/hadoop/hbase/client/package-use.html
index 1d7dd88..d8e47e3 100644
--- a/apidocs/org/apache/hadoop/hbase/client/package-use.html
+++ b/apidocs/org/apache/hadoop/hbase/client/package-use.html
@@ -367,7 +367,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/RawScanResultConsumer.ScanController.html#org.apache.hadoop.hbase.client">RawScanResultConsumer.ScanController</a>
-<div class="block">Used to suspend or stop a scan.</div>
+<div class="block">Used to suspend or stop a scan, or get a scan cursor if available.</div>
 </td>
 </tr>
 <tr class="rowColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html b/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
index 6ecabed..59c2836 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanController.html
@@ -25,108 +25,116 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.client.Result;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Receives {@link Result} for an asynchronous scan.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * &lt;p&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.31"></a>
-<span class="sourceLineNo">032</span> */<a name="line.32"></a>
-<span class="sourceLineNo">033</span>@InterfaceAudience.Public<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public interface RawScanResultConsumer {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * Used to resume a scan.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  @InterfaceAudience.Public<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  interface ScanResumer {<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>    /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.43"></a>
-<span class="sourceLineNo">044</span>     * effect.<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    void resume();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Used to suspend or stop a scan.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * &lt;p&gt;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * Notice that, you should only call the methods below inside onNext or onHeartbeat method. A<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * IllegalStateException will be thrown if you call them at other places.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * &lt;p&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * You can only call one of the methods below, i.e., call suspend or terminate(of course you are<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * free to not call them both), and the methods are not reentrant. A IllegalStateException will be<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * thrown if you have already called one of the methods.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @InterfaceAudience.Public<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  interface ScanController {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>     * Suspend the scan.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>     * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.65"></a>
-<span class="sourceLineNo">066</span>     * before you resume the scan.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>     * @return A resumer used to resume the scan later.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>     */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ScanResumer suspend();<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>     * Terminate the scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    void terminate();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Indicate that we have receive some data.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param results the data fetched from HBase service.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  void onNext(Result[] results, ScanController controller);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * onNext.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  default void onHeartbeat(ScanController controller) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * &lt;p&gt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.104"></a>
+<span class="sourceLineNo">020</span>import java.util.Optional;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.Result;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * Receives {@link Result} for an asynchronous scan.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;p&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.33"></a>
+<span class="sourceLineNo">034</span> */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>@InterfaceAudience.Public<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public interface RawScanResultConsumer {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * Used to resume a scan.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @InterfaceAudience.Public<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  interface ScanResumer {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.45"></a>
+<span class="sourceLineNo">046</span>     * effect.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    void resume();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * Used to suspend or stop a scan, or get a scan cursor if available.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Notice that, you should only call the {@link #suspend()} or {@link #terminate()} inside onNext<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * &lt;p&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * You can only call one of the {@link #suspend()} and {@link #terminate()} methods(of course you<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * are free to not call them both), and the methods are not reentrant. An IllegalStateException<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * will be thrown if you have already called one of the methods.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @InterfaceAudience.Public<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  interface ScanController {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>     * Suspend the scan.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>     * &lt;p&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.67"></a>
+<span class="sourceLineNo">068</span>     * before you resume the scan.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>     * @return A resumer used to resume the scan later.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>     */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ScanResumer suspend();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>     * Terminate the scan.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>     * &lt;p&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    void terminate();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * Get the scan cursor if available.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return The scan cursor.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Optional&lt;Cursor&gt; cursor();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Indicate that we have receive some data.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @param results the data fetched from HBase service.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  void onNext(Result[] results, ScanController controller);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * onNext.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * &lt;p&gt;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  void onError(Throwable error);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * Indicate that the scan operation is completed normally.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  void onComplete();<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>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.117"></a>
+<span class="sourceLineNo">106</span>  default void onHeartbeat(ScanController controller) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;p&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  void onError(Throwable error);<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Indicate that the scan operation is completed normally.<a name="line.117"></a>
 <span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>}<a name="line.121"></a>
+<span class="sourceLineNo">119</span>  void onComplete();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>}<a name="line.129"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/47be635d/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html b/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
index 6ecabed..59c2836 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/RawScanResultConsumer.ScanResumer.html
@@ -25,108 +25,116 @@
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.client;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.client.Result;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Receives {@link Result} for an asynchronous scan.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * &lt;p&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.27"></a>
-<span class="sourceLineNo">028</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.30"></a>
-<span class="sourceLineNo">031</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.31"></a>
-<span class="sourceLineNo">032</span> */<a name="line.32"></a>
-<span class="sourceLineNo">033</span>@InterfaceAudience.Public<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public interface RawScanResultConsumer {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  /**<a name="line.36"></a>
-<span class="sourceLineNo">037</span>   * Used to resume a scan.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  @InterfaceAudience.Public<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  interface ScanResumer {<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>    /**<a name="line.42"></a>
-<span class="sourceLineNo">043</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.43"></a>
-<span class="sourceLineNo">044</span>     * effect.<a name="line.44"></a>
-<span class="sourceLineNo">045</span>     */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    void resume();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * Used to suspend or stop a scan.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * &lt;p&gt;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * Notice that, you should only call the methods below inside onNext or onHeartbeat method. A<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * IllegalStateException will be thrown if you call them at other places.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * &lt;p&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * You can only call one of the methods below, i.e., call suspend or terminate(of course you are<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * free to not call them both), and the methods are not reentrant. A IllegalStateException will be<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * thrown if you have already called one of the methods.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  @InterfaceAudience.Public<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  interface ScanController {<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>     * Suspend the scan.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>     * &lt;p&gt;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.65"></a>
-<span class="sourceLineNo">066</span>     * before you resume the scan.<a name="line.66"></a>
-<span class="sourceLineNo">067</span>     * @return A resumer used to resume the scan later.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>     */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    ScanResumer suspend();<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>     * Terminate the scan.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    void terminate();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Indicate that we have receive some data.<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param results the data fetched from HBase service.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  void onNext(Result[] results, ScanController controller);<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * onNext.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  default void onHeartbeat(ScanController controller) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * &lt;p&gt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.104"></a>
+<span class="sourceLineNo">020</span>import java.util.Optional;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.Result;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * Receives {@link Result} for an asynchronous scan.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * &lt;p&gt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * Notice that, the {@link #onNext(Result[], ScanController)} method will be called in the thread<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * which we send request to HBase service. So if you want the asynchronous scanner fetch data from<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * HBase in background while you process the returned data, you need to move the processing work to<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * another thread to make the {@code onNext} call return immediately. And please do NOT do any time<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * consuming tasks in all methods below unless you know what you are doing.<a name="line.33"></a>
+<span class="sourceLineNo">034</span> */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>@InterfaceAudience.Public<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public interface RawScanResultConsumer {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  /**<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   * Used to resume a scan.<a name="line.39"></a>
+<span class="sourceLineNo">040</span>   */<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @InterfaceAudience.Public<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  interface ScanResumer {<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
+<span class="sourceLineNo">045</span>     * Resume the scan. You are free to call it multiple time but only the first call will take<a name="line.45"></a>
+<span class="sourceLineNo">046</span>     * effect.<a name="line.46"></a>
+<span class="sourceLineNo">047</span>     */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    void resume();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * Used to suspend or stop a scan, or get a scan cursor if available.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * &lt;p&gt;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * Notice that, you should only call the {@link #suspend()} or {@link #terminate()} inside onNext<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * or onHeartbeat method. A IllegalStateException will be thrown if you call them at other places.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * &lt;p&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * You can only call one of the {@link #suspend()} and {@link #terminate()} methods(of course you<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * are free to not call them both), and the methods are not reentrant. An IllegalStateException<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * will be thrown if you have already called one of the methods.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   */<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @InterfaceAudience.Public<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  interface ScanController {<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>    /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>     * Suspend the scan.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>     * &lt;p&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>     * This means we will stop fetching data in background, i.e., will not call onNext any more<a name="line.67"></a>
+<span class="sourceLineNo">068</span>     * before you resume the scan.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>     * @return A resumer used to resume the scan later.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>     */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ScanResumer suspend();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>     * Terminate the scan.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>     * &lt;p&gt;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>     * This is useful when you have got enough results and want to stop the scan in onNext method,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>     * or you want to stop the scan in onHeartbeat method because it has spent too many time.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    void terminate();<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
+<span class="sourceLineNo">082</span>     * Get the scan cursor if available.<a name="line.82"></a>
+<span class="sourceLineNo">083</span>     * @return The scan cursor.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Optional&lt;Cursor&gt; cursor();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Indicate that we have receive some data.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @param results the data fetched from HBase service.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   *          instance is only valid within scope of onNext method. You can only call its method in<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   *          onNext, do NOT store it and call it later outside onNext.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  void onNext(Result[] results, ScanController controller);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  /**<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * Indicate that there is an heartbeat message but we have not cumulated enough cells to call<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * onNext.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * &lt;p&gt;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * This method give you a chance to terminate a slow scan operation.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @param controller used to suspend or terminate the scan. Notice that the {@code controller}<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *          instance is only valid within the scope of onHeartbeat method. You can only call its<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *          method in onHeartbeat, do NOT store it and call it later outside onHeartbeat.<a name="line.104"></a>
 <span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  void onError(Throwable error);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * Indicate that the scan operation is completed normally.<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  void onComplete();<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>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.117"></a>
+<span class="sourceLineNo">106</span>  default void onHeartbeat(ScanController controller) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * Indicate that we hit an unrecoverable error and the scan operation is terminated.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * &lt;p&gt;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * We will not call {@link #onComplete()} after calling {@link #onError(Throwable)}.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  void onError(Throwable error);<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * Indicate that the scan operation is completed normally.<a name="line.117"></a>
 <span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>}<a name="line.121"></a>
+<span class="sourceLineNo">119</span>  void onComplete();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  /**<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * If {@code scan.isScanMetricsEnabled()} returns true, then this method will be called prior to<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   * all other methods in this interface to give you the {@link ScanMetrics} instance for this scan<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   * operation. The {@link ScanMetrics} instance will be updated on-the-fly during the scan, you can<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * store it somewhere to get the metrics at any time if you want.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  default void onScanMetricsCreated(ScanMetrics scanMetrics) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>}<a name="line.129"></a>