You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2015/12/18 17:42:34 UTC

[01/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 441a69cf3 -> d917c66aa


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index 8db20f9..bb97bca 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -36,27 +36,27 @@
 <a class="jxr_linenumber" name="26" href="#26">26</a>  
 <a class="jxr_linenumber" name="27" href="#27">27</a>  {
 <a class="jxr_linenumber" name="28" href="#28">28</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html">HRegionServer</a> regionServer;
-<a class="jxr_linenumber" name="29" href="#29">29</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
-<a class="jxr_linenumber" name="30" href="#30">30</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String bcv;
+<a class="jxr_linenumber" name="29" href="#29">29</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String bcv;
+<a class="jxr_linenumber" name="30" href="#30">30</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String filter;
 <a class="jxr_linenumber" name="31" href="#31">31</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String bcn;
-<a class="jxr_linenumber" name="32" href="#32">32</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String filter;
+<a class="jxr_linenumber" name="32" href="#32">32</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
 <a class="jxr_linenumber" name="33" href="#33">33</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData p_implData)
 <a class="jxr_linenumber" name="34" href="#34">34</a>    {
-<a class="jxr_linenumber" name="35" href="#35">35</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFormat__IsNotDefault())
+<a class="jxr_linenumber" name="35" href="#35">35</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getBcv__IsNotDefault())
 <a class="jxr_linenumber" name="36" href="#36">36</a>      {
-<a class="jxr_linenumber" name="37" href="#37">37</a>        p_implData.setFormat(<span class="jxr_string">"html"</span>);
+<a class="jxr_linenumber" name="37" href="#37">37</a>        p_implData.setBcv(<span class="jxr_string">""</span>);
 <a class="jxr_linenumber" name="38" href="#38">38</a>      }
-<a class="jxr_linenumber" name="39" href="#39">39</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getBcv__IsNotDefault())
+<a class="jxr_linenumber" name="39" href="#39">39</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFilter__IsNotDefault())
 <a class="jxr_linenumber" name="40" href="#40">40</a>      {
-<a class="jxr_linenumber" name="41" href="#41">41</a>        p_implData.setBcv(<span class="jxr_string">""</span>);
+<a class="jxr_linenumber" name="41" href="#41">41</a>        p_implData.setFilter(<span class="jxr_string">"general"</span>);
 <a class="jxr_linenumber" name="42" href="#42">42</a>      }
 <a class="jxr_linenumber" name="43" href="#43">43</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getBcn__IsNotDefault())
 <a class="jxr_linenumber" name="44" href="#44">44</a>      {
 <a class="jxr_linenumber" name="45" href="#45">45</a>        p_implData.setBcn(<span class="jxr_string">""</span>);
 <a class="jxr_linenumber" name="46" href="#46">46</a>      }
-<a class="jxr_linenumber" name="47" href="#47">47</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFilter__IsNotDefault())
+<a class="jxr_linenumber" name="47" href="#47">47</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFormat__IsNotDefault())
 <a class="jxr_linenumber" name="48" href="#48">48</a>      {
-<a class="jxr_linenumber" name="49" href="#49">49</a>        p_implData.setFilter(<span class="jxr_string">"general"</span>);
+<a class="jxr_linenumber" name="49" href="#49">49</a>        p_implData.setFormat(<span class="jxr_string">"html"</span>);
 <a class="jxr_linenumber" name="50" href="#50">50</a>      }
 <a class="jxr_linenumber" name="51" href="#51">51</a>      <strong class="jxr_keyword">return</strong> p_implData;
 <a class="jxr_linenumber" name="52" href="#52">52</a>    }
@@ -64,10 +64,10 @@
 <a class="jxr_linenumber" name="54" href="#54">54</a>    {
 <a class="jxr_linenumber" name="55" href="#55">55</a>      <strong class="jxr_keyword">super</strong>(p_templateManager, __jamon_setOptionalArguments(p_implData));
 <a class="jxr_linenumber" name="56" href="#56">56</a>      regionServer = p_implData.getRegionServer();
-<a class="jxr_linenumber" name="57" href="#57">57</a>      format = p_implData.getFormat();
-<a class="jxr_linenumber" name="58" href="#58">58</a>      bcv = p_implData.getBcv();
+<a class="jxr_linenumber" name="57" href="#57">57</a>      bcv = p_implData.getBcv();
+<a class="jxr_linenumber" name="58" href="#58">58</a>      filter = p_implData.getFilter();
 <a class="jxr_linenumber" name="59" href="#59">59</a>      bcn = p_implData.getBcn();
-<a class="jxr_linenumber" name="60" href="#60">60</a>      filter = p_implData.getFilter();
+<a class="jxr_linenumber" name="60" href="#60">60</a>      format = p_implData.getFormat();
 <a class="jxr_linenumber" name="61" href="#61">61</a>    }
 <a class="jxr_linenumber" name="62" href="#62">62</a>    
 <a class="jxr_linenumber" name="63" href="#63">63</a>    @Override <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> renderNoFlush(<strong class="jxr_keyword">final</strong> java.io.Writer jamonWriter)
@@ -96,8 +96,8 @@
 <a class="jxr_linenumber" name="86" href="#86">86</a>        <em class="jxr_comment">// 41, 3</em>
 <a class="jxr_linenumber" name="87" href="#87">87</a>        {
 <a class="jxr_linenumber" name="88" href="#88">88</a>          org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__<strong class="jxr_keyword">var</strong>_1 = <strong class="jxr_keyword">new</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(<strong class="jxr_keyword">this</strong>.getTemplateManager());
-<a class="jxr_linenumber" name="89" href="#89">89</a>          __jamon__<strong class="jxr_keyword">var</strong>_1.setFormat(<span class="jxr_string">"json"</span> );
-<a class="jxr_linenumber" name="90" href="#90">90</a>          __jamon__<strong class="jxr_keyword">var</strong>_1.setFilter(filter);
+<a class="jxr_linenumber" name="89" href="#89">89</a>          __jamon__<strong class="jxr_keyword">var</strong>_1.setFilter(filter);
+<a class="jxr_linenumber" name="90" href="#90">90</a>          __jamon__<strong class="jxr_keyword">var</strong>_1.setFormat(<span class="jxr_string">"json"</span> );
 <a class="jxr_linenumber" name="91" href="#91">91</a>          __jamon__<strong class="jxr_keyword">var</strong>_1.renderNoFlush(jamonWriter);
 <a class="jxr_linenumber" name="92" href="#92">92</a>        }
 <a class="jxr_linenumber" name="93" href="#93">93</a>        <em class="jxr_comment">// 41, 68</em>


[21/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 feed20b..abb8a15 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -31,2767 +31,2812 @@
 <span class="sourceLineNo">023</span>import java.net.BindException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.net.InetSocketAddress;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.net.UnknownHostException;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Iterator;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map.Entry;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.commons.logging.Log;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.logging.LogFactory;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Cell;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HConstants;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ServerName;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.TableName;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Append;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Get;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Put;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.security.User;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.zookeeper.KeeperException;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>import com.google.common.annotations.VisibleForTesting;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import com.google.protobuf.ByteString;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import com.google.protobuf.Message;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import com.google.protobuf.RpcController;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import com.google.protobuf.ServiceException;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@InterfaceAudience.Private<a name="line.194"></a>
-<span class="sourceLineNo">195</span>@SuppressWarnings("deprecation")<a name="line.195"></a>
-<span class="sourceLineNo">196</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ConfigurationObserver {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /** RPC scheduler to use for the region server. */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  final Counter requestCount = new Counter();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  // Server to handle client requests.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  final RpcServerInterface rpcServer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  final InetSocketAddress isa;<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private final HRegionServer regionServer;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private final long maxScannerResultSize;<a name="line.224"></a>
+<span class="sourceLineNo">026</span>import java.nio.ByteBuffer;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.HashMap;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Map.Entry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.NavigableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Set;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.commons.logging.Log;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.commons.logging.LogFactory;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.conf.Configuration;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.Cell;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Append;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Get;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Result;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.security.User;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.zookeeper.KeeperException;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>import com.google.common.annotations.VisibleForTesting;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import com.google.protobuf.ByteString;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import com.google.protobuf.Message;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import com.google.protobuf.RpcController;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import com.google.protobuf.ServiceException;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.195"></a>
+<span class="sourceLineNo">196</span> */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>@InterfaceAudience.Private<a name="line.197"></a>
+<span class="sourceLineNo">198</span>@SuppressWarnings("deprecation")<a name="line.198"></a>
+<span class="sourceLineNo">199</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    ConfigurationObserver {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** RPC scheduler to use for the region server. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  final Counter requestCount = new Counter();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // Server to handle client requests.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  final RpcServerInterface rpcServer;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  final InetSocketAddress isa;<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  // The reference to the priority extraction function<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private final PriorityFunction priority;<a name="line.227"></a>
+<span class="sourceLineNo">226</span>  private final HRegionServer regionServer;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  private final long maxScannerResultSize;<a name="line.227"></a>
 <span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * The RPC timeout period (milliseconds)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private final int rpcTimeout;<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The minimum allowable delta to use for the scan limit<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  private final long minimumScanTimeLimitDelta;<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>   * An Rpc callback for closing a RegionScanner.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    private final RegionScanner scanner;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.scanner = scanner;<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>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void run() throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      this.scanner.close();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    private final String scannerName;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    private final RegionScanner scanner;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final Lease lease;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      this.scannerName = scannerName;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.scanner = scanner;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.lease = lease;<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public void run() throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.scanner.shipped();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (scanners.containsKey(scannerName)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * completion of multiGets.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public void addScanner(RegionScanner scanner) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.scanners.add(scanner);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public void run() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      for (RegionScanner scanner : scanners) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          scanner.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static class RegionScannerHolder {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private RegionScanner s;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    private Region r;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final RpcCallback closeCallBack;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final RpcCallback shippedCallback;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        RpcCallback shippedCallback) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.s = s;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.r = r;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.closeCallBack = closeCallBack;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.shippedCallback = shippedCallback;<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 getNextCallSeq() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      return nextCallSeq.get();<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 void incNextCallSeq() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      nextCallSeq.incrementAndGet();<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 rollbackNextCallSeq() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      nextCallSeq.decrementAndGet();<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * closed<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private class ScannerListener implements LeaseListener {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    private final String scannerName;<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    ScannerListener(final String n) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      this.scannerName = n;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public void leaseExpired() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (rsh != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        RegionScanner s = rsh.s;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        try {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          s.close();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        } catch (IOException e) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          LOG.error("Closing scanner for "<a name="line.373"></a>
-<span class="sourceLineNo">374</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " scanner found, hence no chance to close that related scanner!");<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>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static ResultOrException getResultOrException(<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      final ClientProtos.Result r, final int index, final ClientProtos.RegionLoadStats stats) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return getResultOrException(ResponseConverter.buildActionResult(r, stats), index);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      final ResultOrException.Builder builder, final int index) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return builder.setIndex(index).build();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param mutation Mutation.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param nonceGroup Nonce group from the request.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @returns Nonce used (can be NO_NONCE).<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  private long startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      throws IOException, OperationConflictException {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return HConstants.NO_NONCE;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    boolean canProceed = false;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    try {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    } catch (InterruptedException ex) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    if (!canProceed) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      // TODO: instead, we could convert append/increment to get w/mvcc<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      String message = "The operation with nonce {" + nonceGroup + ", " + mutation.getNonce()<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        + "} on row [" + Bytes.toString(mutation.getRow().toByteArray())<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        + "] may have already completed";<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      throw new OperationConflictException(message);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    return mutation.getNonce();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * Ends nonce operation for a mutation, if needed.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @param mutation Mutation.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      long nonceGroup, boolean success) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<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><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return True if current call supports cellblocks<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private boolean isClientCellBlockSupport() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    RpcCallContext context = RpcServer.getCurrentCall();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final PayloadCarryingRpcController rpcc) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (result == null) return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (isClientCellBlockSupport()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      builder.setResult(pbr);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private void addResults(final ScanResponse.Builder builder, final List&lt;Result&gt; results,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final RpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    builder.setStale(!isDefaultRegion);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (results == null || results.isEmpty()) return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    if (clientCellBlockSupported) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (Result res : results) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        builder.addCellsPerResult(res.size());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        builder.addPartialFlagPerResult(res.isPartial());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      ((PayloadCarryingRpcController)controller).<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        setCellScanner(CellUtil.createCellScanner(results));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    } else {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      for (Result res: results) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        builder.addResults(pbr);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<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>   * Mutate a list of rows atomically.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param region<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param actions<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @throws IOException<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private ClientProtos.RegionLoadStats mutateRows(final Region region,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      final CellScanner cellScanner) throws IOException {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    RowMutations rm = null;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    for (ClientProtos.Action action: actions) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      if (action.hasGet()) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          action.getGet());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      MutationType type = action.getMutation().getMutateType();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (rm == null) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        rm = new RowMutations(action.getMutation().getRow().toByteArray());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      switch (type) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        case PUT:<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          rm.add(ProtobufUtil.toPut(action.getMutation(), cellScanner));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          break;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        case DELETE:<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          rm.add(ProtobufUtil.toDelete(action.getMutation(), cellScanner));<a name="line.508"></a>
+<span class="sourceLineNo">229</span>  // The reference to the priority extraction function<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private final PriorityFunction priority;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  private final long minimumScanTimeLimitDelta;<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * An Rpc callback for closing a RegionScanner.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    private final RegionScanner scanner;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      this.scanner = scanner;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public void run() throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      this.scanner.close();<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    private final String scannerName;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    private final RegionScanner scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    private final Lease lease;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.scannerName = scannerName;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.scanner = scanner;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.lease = lease;<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      this.scanner.shipped();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (scanners.containsKey(scannerName)) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<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><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * completion of multiGets.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public void addScanner(RegionScanner scanner) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      this.scanners.add(scanner);<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>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (RegionScanner scanner : scanners) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        try {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          scanner.close();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } catch (IOException e) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private static class RegionScannerHolder {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private RegionScanner s;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private Region r;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final RpcCallback closeCallBack;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final RpcCallback shippedCallback;<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        RpcCallback shippedCallback) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.s = s;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.r = r;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.closeCallBack = closeCallBack;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.shippedCallback = shippedCallback;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private long getNextCallSeq() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return nextCallSeq.get();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    private void incNextCallSeq() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      nextCallSeq.incrementAndGet();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private void rollbackNextCallSeq() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      nextCallSeq.decrementAndGet();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * closed<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private class ScannerListener implements LeaseListener {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private final String scannerName;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    ScannerListener(final String n) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      this.scannerName = n;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public void leaseExpired() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (rsh != null) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        RegionScanner s = rsh.s;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          s.close();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        } catch (IOException e) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          LOG.error("Closing scanner for "<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      } else {<a

<TRUNCATED>

[20/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index e3cfe40..502349e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -68,13 +68,13 @@
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.67"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
@@ -133,91 +133,91 @@
 <span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 28, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setServerManager(ServerManager serverManager)<a name="line.129"></a>
+<span class="sourceLineNo">128</span>    // 21, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 28, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_serverManager = serverManager;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_serverManager__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 21, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_frags = frags;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_frags__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerManager getServerManager()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_serverManager;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_frags;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerManager m_serverManager;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getServerManager__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFrags__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_serverManager__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_frags__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_serverManager__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_frags__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 29, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 24, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_deadServers = deadServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_deadServers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 29, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_assignmentManager = assignmentManager;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_assignmentManager__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_deadServers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getDeadServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private AssignmentManager m_assignmentManager;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_deadServers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_deadServers__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 27, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setFormat(String format)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 28, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setServerManager(ServerManager serverManager)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 27, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_format = format;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_format__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 28, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_serverManager = serverManager;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_serverManager__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public String getFormat()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public ServerManager getServerManager()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_format;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_serverManager;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private String m_format;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getFormat__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private ServerManager m_serverManager;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getServerManager__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_format__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_format__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 21, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 21, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_frags = frags;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_frags__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_frags;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFrags__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_frags__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_frags__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 29, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 29, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_assignmentManager = assignmentManager;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_assignmentManager__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public AssignmentManager getAssignmentManager()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_assignmentManager;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private AssignmentManager m_assignmentManager;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_assignmentManager__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    // 25, 1<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
@@ -235,23 +235,23 @@
 <span class="sourceLineNo">227</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
+<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    // 26, 1<a name="line.247"></a>
 <span class="sourceLineNo">248</span>    public void setFilter(String filter)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
@@ -287,38 +287,38 @@
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerManager serverManager;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFrags(p_frags);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected AssignmentManager assignmentManager;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected String format;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected ServerManager serverManager;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setFormat(p_format);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<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>  protected Map&lt;String,Integer&gt; frags;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFrags(p_frags);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected AssignmentManager assignmentManager;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
@@ -329,10 +329,10 @@
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
index e3cfe40..502349e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
@@ -68,13 +68,13 @@
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.67"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
@@ -133,91 +133,91 @@
 <span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 28, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setServerManager(ServerManager serverManager)<a name="line.129"></a>
+<span class="sourceLineNo">128</span>    // 21, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 28, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_serverManager = serverManager;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_serverManager__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 21, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_frags = frags;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_frags__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerManager getServerManager()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_serverManager;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_frags;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerManager m_serverManager;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getServerManager__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFrags__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_serverManager__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_frags__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_serverManager__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_frags__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 29, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 24, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_deadServers = deadServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_deadServers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 29, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_assignmentManager = assignmentManager;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_assignmentManager__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_deadServers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getDeadServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private AssignmentManager m_assignmentManager;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_deadServers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_deadServers__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 27, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setFormat(String format)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 28, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setServerManager(ServerManager serverManager)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 27, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_format = format;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_format__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 28, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_serverManager = serverManager;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_serverManager__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public String getFormat()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public ServerManager getServerManager()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_format;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_serverManager;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private String m_format;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getFormat__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private ServerManager m_serverManager;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getServerManager__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_format__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_format__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 21, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 21, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_frags = frags;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_frags__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_frags;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFrags__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_frags__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_frags__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 29, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 29, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_assignmentManager = assignmentManager;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_assignmentManager__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public AssignmentManager getAssignmentManager()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_assignmentManager;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private AssignmentManager m_assignmentManager;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_assignmentManager__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    // 25, 1<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
@@ -235,23 +235,23 @@
 <span class="sourceLineNo">227</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
+<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    // 26, 1<a name="line.247"></a>
 <span class="sourceLineNo">248</span>    public void setFilter(String filter)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
@@ -287,38 +287,38 @@
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerManager serverManager;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFrags(p_frags);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected AssignmentManager assignmentManager;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected String format;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected ServerManager serverManager;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setFormat(p_format);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<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>  protected Map&lt;String,Integer&gt; frags;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFrags(p_frags);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected AssignmentManager assignmentManager;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
@@ -329,10 +329,10 @@
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index e3cfe40..502349e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -68,13 +68,13 @@
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.67"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
@@ -133,91 +133,91 @@
 <span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 28, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setServerManager(ServerManager serverManager)<a name="line.129"></a>
+<span class="sourceLineNo">128</span>    // 21, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 28, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_serverManager = serverManager;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_serverManager__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 21, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_frags = frags;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_frags__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerManager getServerManager()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_serverManager;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_frags;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerManager m_serverManager;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getServerManager__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFrags__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_serverManager__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_frags__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_serverManager__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_frags__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 29, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 24, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_deadServers = deadServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_deadServers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 29, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_assignmentManager = assignmentManager;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_assignmentManager__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public AssignmentManager getAssignmentManager()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_deadServers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_assignmentManager;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getDeadServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private AssignmentManager m_assignmentManager;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_deadServers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_assignmentManager__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_deadServers__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 27, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setFormat(String format)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 28, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setServerManager(ServerManager serverManager)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 27, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_format = format;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_format__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 28, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_serverManager = serverManager;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_serverManager__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public String getFormat()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public ServerManager getServerManager()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_format;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_serverManager;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private String m_format;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getFormat__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private ServerManager m_serverManager;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getServerManager__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_format__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_serverManager__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_format__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 21, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_serverManager__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 21, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_frags = frags;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_frags__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_frags;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFrags__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_frags__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_frags__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 29, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 29, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_assignmentManager = assignmentManager;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_assignmentManager__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public AssignmentManager getAssignmentManager()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_assignmentManager;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private AssignmentManager m_assignmentManager;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_assignmentManager__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    // 25, 1<a name="line.213"></a>
 <span class="sourceLineNo">214</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
@@ -235,23 +235,23 @@
 <span class="sourceLineNo">227</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
 <span class="sourceLineNo">229</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
+<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    // 26, 1<a name="line.247"></a>
 <span class="sourceLineNo">248</span>    public void setFilter(String filter)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
@@ -287,38 +287,38 @@
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerManager serverManager;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFrags(p_frags);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected AssignmentManager assignmentManager;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected String format;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected ServerManager serverManager;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setFormat(p_format);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<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>  protected Map&lt;String,Integer&gt; frags;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFrags(p_frags);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected AssignmentManager assignmentManager;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
@@ -329,10 +329,10 @@
 <span class="sourceLineNo">321</span>    return this;<a name="line.321"></a>
 <span class="sourceLineNo">322</span>  }<a name="line.322"></a>
 <span class="sourceLineNo">323</span>  <a name="line.323"></a>
-<span class="sourceLineNo">324</span>  protected List&lt;ServerName&gt; servers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index 66544af..33a7704 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -69,13 +69,13 @@
 <span class="sourceLineNo">061</span>{<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private final HMaster master;<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  private final ServerName metaLocation;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private final ServerManager serverManager;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final String format;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final AssignmentManager assignmentManager;<a name="line.68"></a>
+<span class="sourceLineNo">064</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final AssignmentManager assignmentManager;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final ServerManager serverManager;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private final String format;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final List&lt;ServerName&gt; servers;<a name="line.68"></a>
 <span class="sourceLineNo">069</span>  private final boolean catalogJanitorEnabled;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final List&lt;ServerName&gt; servers;<a name="line.70"></a>
+<span class="sourceLineNo">070</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.70"></a>
 <span class="sourceLineNo">071</span>  private final String filter;<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  // 68, 1<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  <a name="line.73"></a>
@@ -110,33 +110,33 @@
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
 <span class="sourceLineNo">103</span>      p_implData.setMetaLocation(null);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      p_implData.setServerManager(null);<a name="line.107"></a>
+<span class="sourceLineNo">107</span>      p_implData.setFrags(null);<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.109"></a>
+<span class="sourceLineNo">109</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      p_implData.setDeadServers(null);<a name="line.111"></a>
+<span class="sourceLineNo">111</span>      p_implData.setAssignmentManager(null);<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      p_implData.setFormat("html");<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      p_implData.setServerManager(null);<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.117"></a>
+<span class="sourceLineNo">117</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.117"></a>
 <span class="sourceLineNo">118</span>    {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      p_implData.setFrags(null);<a name="line.119"></a>
+<span class="sourceLineNo">119</span>      p_implData.setFormat("html");<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.121"></a>
+<span class="sourceLineNo">121</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      p_implData.setAssignmentManager(null);<a name="line.123"></a>
+<span class="sourceLineNo">123</span>      p_implData.setServers(null);<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    }<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
 <span class="sourceLineNo">127</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.129"></a>
+<span class="sourceLineNo">129</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      p_implData.setServers(null);<a name="line.131"></a>
+<span class="sourceLineNo">131</span>      p_implData.setDeadServers(null);<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    }<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    {<a name="line.134"></a>
@@ -149,13 +149,13 @@
 <span class="sourceLineNo">141</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.141"></a>
 <span class="sourceLineNo">142</span>    master = p_implData.getMaster();<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    metaLocation = p_implData.getMetaLocation();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    serverManager = p_implData.getServerManager();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    deadServers = p_implData.getDeadServers();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    format = p_implData.getFormat();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    frags = p_implData.getFrags();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.148"></a>
+<span class="sourceLineNo">144</span>    frags = p_implData.getFrags();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    serverManager = p_implData.getServerManager();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    format = p_implData.getFormat();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    servers = p_implData.getServers();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    servers = p_implData.getServers();<a name="line.150"></a>
+<span class="sourceLineNo">150</span>    deadServers = p_implData.getDeadServers();<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    filter = p_implData.getFilter();<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>
@@ -170,8 +170,8 @@
 <span class="sourceLineNo">162</span>      // 60, 3<a name="line.162"></a>
 <span class="sourceLineNo">163</span>      {<a name="line.163"></a>
 <span class="sourceLineNo">164</span>        org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_6 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        __jamon__var_6.setFormat("json" );<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        __jamon__var_6.setFilter(filter);<a name="line.166"></a>
+<span class="sourceLineNo">165</span>        __jamon__var_6.setFilter(filter);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        __jamon__var_6.setFormat("json" );<a name="line.166"></a>
 <span class="sourceLineNo">167</span>        __jamon__var_6.renderNoFlush(jamonWriter);<a name="line.167"></a>
 <span class="sourceLineNo">168</span>      }<a name="line.168"></a>
 <span class="sourceLineNo">169</span>      // 60, 68<a name="line.169"></a>


[37/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     

<TRUNCATED>

[07/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/client/HTable.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/client/HTable.html b/xref/org/apache/hadoop/hbase/client/HTable.html
index 2f6a9a4..752ff66 100644
--- a/xref/org/apache/hadoop/hbase/client/HTable.html
+++ b/xref/org/apache/hadoop/hbase/client/HTable.html
@@ -448,7 +448,7 @@
 <a class="jxr_linenumber" name="438" href="#438">438</a>           <strong class="jxr_keyword">try</strong> {
 <a class="jxr_linenumber" name="439" href="#439">439</a>             ClientProtos.GetResponse response = getStub().get(controller, request);
 <a class="jxr_linenumber" name="440" href="#440">440</a>             <strong class="jxr_keyword">if</strong> (response == <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="441" href="#441">441</a>             <strong class="jxr_keyword">return</strong> ProtobufUtil.toResult(response.getResult());
+<a class="jxr_linenumber" name="441" href="#441">441</a>             <strong class="jxr_keyword">return</strong> ProtobufUtil.toResult(response.getResult(), controller.cellScanner());
 <a class="jxr_linenumber" name="442" href="#442">442</a>           } <strong class="jxr_keyword">catch</strong> (ServiceException se) {
 <a class="jxr_linenumber" name="443" href="#443">443</a>             <strong class="jxr_keyword">throw</strong> ProtobufUtil.getRemoteException(se);
 <a class="jxr_linenumber" name="444" href="#444">444</a>           }

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html b/xref/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
index 268da5f..ad527a9 100644
--- a/xref/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
+++ b/xref/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
@@ -171,7 +171,7 @@
 <a class="jxr_linenumber" name="161" href="#161">161</a>         <strong class="jxr_keyword">if</strong> (response == <strong class="jxr_keyword">null</strong>) {
 <a class="jxr_linenumber" name="162" href="#162">162</a>           <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
 <a class="jxr_linenumber" name="163" href="#163">163</a>         }
-<a class="jxr_linenumber" name="164" href="#164">164</a>         <strong class="jxr_keyword">return</strong> ProtobufUtil.toResult(response.getResult());
+<a class="jxr_linenumber" name="164" href="#164">164</a>         <strong class="jxr_keyword">return</strong> ProtobufUtil.toResult(response.getResult(), controller.cellScanner());
 <a class="jxr_linenumber" name="165" href="#165">165</a>       } <strong class="jxr_keyword">catch</strong> (ServiceException se) {
 <a class="jxr_linenumber" name="166" href="#166">166</a>         <strong class="jxr_keyword">throw</strong> ProtobufUtil.getRemoteException(se);
 <a class="jxr_linenumber" name="167" href="#167">167</a>       }

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/client/VersionInfoUtil.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/client/VersionInfoUtil.html b/xref/org/apache/hadoop/hbase/client/VersionInfoUtil.html
index e31556b..2a12b16 100644
--- a/xref/org/apache/hadoop/hbase/client/VersionInfoUtil.html
+++ b/xref/org/apache/hadoop/hbase/client/VersionInfoUtil.html
@@ -54,23 +54,31 @@
 <a class="jxr_linenumber" name="44" href="#44">44</a>                                            <strong class="jxr_keyword">int</strong> major,
 <a class="jxr_linenumber" name="45" href="#45">45</a>                                            <strong class="jxr_keyword">int</strong> minor) {
 <a class="jxr_linenumber" name="46" href="#46">46</a>      <strong class="jxr_keyword">if</strong> (versionInfo != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="47" href="#47">47</a>        <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="48" href="#48">48</a>          String[] components = versionInfo.getVersion().split(<span class="jxr_string">"&#92;&#92;."</span>);
-<a class="jxr_linenumber" name="49" href="#49">49</a>  
-<a class="jxr_linenumber" name="50" href="#50">50</a>          <strong class="jxr_keyword">int</strong> clientMajor = components.length &gt; 0 ? Integer.parseInt(components[0]) : 0;
-<a class="jxr_linenumber" name="51" href="#51">51</a>          <strong class="jxr_keyword">if</strong> (clientMajor != major) {
-<a class="jxr_linenumber" name="52" href="#52">52</a>            <strong class="jxr_keyword">return</strong> clientMajor &gt; major;
-<a class="jxr_linenumber" name="53" href="#53">53</a>          }
-<a class="jxr_linenumber" name="54" href="#54">54</a>  
-<a class="jxr_linenumber" name="55" href="#55">55</a>          <strong class="jxr_keyword">int</strong> clientMinor = components.length &gt; 1 ? Integer.parseInt(components[1]) : 0;
-<a class="jxr_linenumber" name="56" href="#56">56</a>          <strong class="jxr_keyword">return</strong> clientMinor &gt;= minor;
-<a class="jxr_linenumber" name="57" href="#57">57</a>        } <strong class="jxr_keyword">catch</strong> (NumberFormatException e) {
-<a class="jxr_linenumber" name="58" href="#58">58</a>          <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="59" href="#59">59</a>        }
-<a class="jxr_linenumber" name="60" href="#60">60</a>      }
-<a class="jxr_linenumber" name="61" href="#61">61</a>      <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="62" href="#62">62</a>    }
-<a class="jxr_linenumber" name="63" href="#63">63</a>  }
+<a class="jxr_linenumber" name="47" href="#47">47</a>        <strong class="jxr_keyword">if</strong> (versionInfo.hasVersionMajor() &amp;&amp; versionInfo.hasVersionMinor()) {
+<a class="jxr_linenumber" name="48" href="#48">48</a>          <strong class="jxr_keyword">int</strong> clientMajor = versionInfo.getVersionMajor();
+<a class="jxr_linenumber" name="49" href="#49">49</a>          <strong class="jxr_keyword">if</strong> (clientMajor != major) {
+<a class="jxr_linenumber" name="50" href="#50">50</a>            <strong class="jxr_keyword">return</strong> clientMajor &gt; major;
+<a class="jxr_linenumber" name="51" href="#51">51</a>          }
+<a class="jxr_linenumber" name="52" href="#52">52</a>          <strong class="jxr_keyword">int</strong> clientMinor = versionInfo.getVersionMinor();
+<a class="jxr_linenumber" name="53" href="#53">53</a>          <strong class="jxr_keyword">return</strong> clientMinor &gt;= minor;
+<a class="jxr_linenumber" name="54" href="#54">54</a>        }
+<a class="jxr_linenumber" name="55" href="#55">55</a>        <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="56" href="#56">56</a>          String[] components = versionInfo.getVersion().split(<span class="jxr_string">"&#92;&#92;."</span>);
+<a class="jxr_linenumber" name="57" href="#57">57</a>  
+<a class="jxr_linenumber" name="58" href="#58">58</a>          <strong class="jxr_keyword">int</strong> clientMajor = components.length &gt; 0 ? Integer.parseInt(components[0]) : 0;
+<a class="jxr_linenumber" name="59" href="#59">59</a>          <strong class="jxr_keyword">if</strong> (clientMajor != major) {
+<a class="jxr_linenumber" name="60" href="#60">60</a>            <strong class="jxr_keyword">return</strong> clientMajor &gt; major;
+<a class="jxr_linenumber" name="61" href="#61">61</a>          }
+<a class="jxr_linenumber" name="62" href="#62">62</a>  
+<a class="jxr_linenumber" name="63" href="#63">63</a>          <strong class="jxr_keyword">int</strong> clientMinor = components.length &gt; 1 ? Integer.parseInt(components[1]) : 0;
+<a class="jxr_linenumber" name="64" href="#64">64</a>          <strong class="jxr_keyword">return</strong> clientMinor &gt;= minor;
+<a class="jxr_linenumber" name="65" href="#65">65</a>        } <strong class="jxr_keyword">catch</strong> (NumberFormatException e) {
+<a class="jxr_linenumber" name="66" href="#66">66</a>          <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="67" href="#67">67</a>        }
+<a class="jxr_linenumber" name="68" href="#68">68</a>      }
+<a class="jxr_linenumber" name="69" href="#69">69</a>      <strong class="jxr_keyword">return</strong> false;
+<a class="jxr_linenumber" name="70" href="#70">70</a>    }
+<a class="jxr_linenumber" name="71" href="#71">71</a>  }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/ipc/RpcCallContext.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/ipc/RpcCallContext.html b/xref/org/apache/hadoop/hbase/ipc/RpcCallContext.html
index ca74c9f..a7c97ee 100644
--- a/xref/org/apache/hadoop/hbase/ipc/RpcCallContext.html
+++ b/xref/org/apache/hadoop/hbase/ipc/RpcCallContext.html
@@ -100,7 +100,10 @@
 <a class="jxr_linenumber" name="90" href="#90">90</a>  <em class="jxr_javadoccomment">   * onerous.</em>
 <a class="jxr_linenumber" name="91" href="#91">91</a>  <em class="jxr_javadoccomment">   */</em>
 <a class="jxr_linenumber" name="92" href="#92">92</a>    <strong class="jxr_keyword">void</strong> incrementResponseCellSize(<strong class="jxr_keyword">long</strong> cellSize);
-<a class="jxr_linenumber" name="93" href="#93">93</a>  }
+<a class="jxr_linenumber" name="93" href="#93">93</a>  
+<a class="jxr_linenumber" name="94" href="#94">94</a>    <strong class="jxr_keyword">long</strong> getResponseBlockSize();
+<a class="jxr_linenumber" name="95" href="#95">95</a>    <strong class="jxr_keyword">void</strong> incrementResponseBlockSize(<strong class="jxr_keyword">long</strong> blockSize);
+<a class="jxr_linenumber" name="96" href="#96">96</a>  }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


[31/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     * connections will be looked at for the cleanup.<a name="line.735"></a>
+<span class="sour

<TRUNCATED>

[08/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html b/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
index 3ce955c..b67c98d 100644
--- a/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
+++ b/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
@@ -56,1492 +56,1772 @@
 <a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
 <a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.io.hfile.TestHFile;
 <a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.AssignmentManager;
-<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.RegionStates;
-<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.TableLockManager;
-<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegion;
-<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionServer;
-<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;
-<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.replication.ReplicationFactory;
-<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.replication.ReplicationQueues;
-<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.LargeTests;
-<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.MiscTests;
-<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;
-<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;
-<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
-<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.junit.AfterClass;
-<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.junit.Assert;
-<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.junit.Before;
-<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.junit.BeforeClass;
-<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.junit.Test;
-<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.junit.experimental.categories.Category;
-<a class="jxr_linenumber" name="67" href="#67">67</a>  
-<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
-<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
-<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedList;
-<a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">import</strong> java.util.List;
-<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.Callable;
-<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.CountDownLatch;
-<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ExecutorService;
-<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.Executors;
-<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.Future;
-<a class="jxr_linenumber" name="77" href="#77">77</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ScheduledThreadPoolExecutor;
-<a class="jxr_linenumber" name="78" href="#78">78</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.SynchronousQueue;
-<a class="jxr_linenumber" name="79" href="#79">79</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ThreadPoolExecutor;
-<a class="jxr_linenumber" name="80" href="#80">80</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.TimeUnit;
-<a class="jxr_linenumber" name="81" href="#81">81</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicBoolean;
-<a class="jxr_linenumber" name="82" href="#82">82</a>  
-<a class="jxr_linenumber" name="83" href="#83">83</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.*;
-<a class="jxr_linenumber" name="84" href="#84">84</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.*;
-<a class="jxr_linenumber" name="85" href="#85">85</a>  
-<a class="jxr_linenumber" name="86" href="#86">86</a>  @Category({MiscTests.<strong class="jxr_keyword">class</strong>, LargeTests.<strong class="jxr_keyword">class</strong>})
-<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html">TestHBaseFsckOneRS</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html">BaseTestHBaseFsck</a> {
+<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.RegionState;
+<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.RegionStates;
+<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.TableLockManager;
+<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegion;
+<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionServer;
+<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.SplitTransactionImpl;
+<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.SplitTransactionFactory;
+<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;
+<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.replication.ReplicationFactory;
+<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.replication.ReplicationQueues;
+<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.LargeTests;
+<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.MiscTests;
+<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;
+<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;
+<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
+<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.junit.AfterClass;
+<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.junit.Assert;
+<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.junit.Before;
+<a class="jxr_linenumber" name="67" href="#67">67</a>  <strong class="jxr_keyword">import</strong> org.junit.BeforeClass;
+<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> org.junit.Ignore;
+<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> org.junit.Test;
+<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> org.junit.experimental.categories.Category;
+<a class="jxr_linenumber" name="71" href="#71">71</a>  
+<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
+<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
+<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedList;
+<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> java.util.List;
+<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
+<a class="jxr_linenumber" name="77" href="#77">77</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
+<a class="jxr_linenumber" name="78" href="#78">78</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.Callable;
+<a class="jxr_linenumber" name="79" href="#79">79</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.CountDownLatch;
+<a class="jxr_linenumber" name="80" href="#80">80</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ExecutorService;
+<a class="jxr_linenumber" name="81" href="#81">81</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.Executors;
+<a class="jxr_linenumber" name="82" href="#82">82</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.Future;
+<a class="jxr_linenumber" name="83" href="#83">83</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ScheduledThreadPoolExecutor;
+<a class="jxr_linenumber" name="84" href="#84">84</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.SynchronousQueue;
+<a class="jxr_linenumber" name="85" href="#85">85</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ThreadPoolExecutor;
+<a class="jxr_linenumber" name="86" href="#86">86</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.TimeUnit;
+<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicBoolean;
 <a class="jxr_linenumber" name="88" href="#88">88</a>  
-<a class="jxr_linenumber" name="89" href="#89">89</a>    @BeforeClass
-<a class="jxr_linenumber" name="90" href="#90">90</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> setUpBeforeClass() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="91" href="#91">91</a>      TEST_UTIL.getConfiguration().set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY,
-<a class="jxr_linenumber" name="92" href="#92">92</a>          MasterSyncObserver.<strong class="jxr_keyword">class</strong>.getName());
-<a class="jxr_linenumber" name="93" href="#93">93</a>  
-<a class="jxr_linenumber" name="94" href="#94">94</a>      conf.setInt(<span class="jxr_string">"hbase.regionserver.handler.count"</span>, 2);
-<a class="jxr_linenumber" name="95" href="#95">95</a>      conf.setInt(<span class="jxr_string">"hbase.regionserver.metahandler.count"</span>, 30);
-<a class="jxr_linenumber" name="96" href="#96">96</a>  
-<a class="jxr_linenumber" name="97" href="#97">97</a>      conf.setInt(<span class="jxr_string">"hbase.htable.threads.max"</span>, POOL_SIZE);
-<a class="jxr_linenumber" name="98" href="#98">98</a>      conf.setInt(<span class="jxr_string">"hbase.hconnection.threads.max"</span>, 2 * POOL_SIZE);
-<a class="jxr_linenumber" name="99" href="#99">99</a>      conf.setInt(<span class="jxr_string">"hbase.hconnection.threads.core"</span>, POOL_SIZE);
-<a class="jxr_linenumber" name="100" href="#100">100</a>     conf.setInt(<span class="jxr_string">"hbase.hbck.close.timeout"</span>, 2 * REGION_ONLINE_TIMEOUT);
-<a class="jxr_linenumber" name="101" href="#101">101</a>     conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, 8 * REGION_ONLINE_TIMEOUT);
-<a class="jxr_linenumber" name="102" href="#102">102</a>     TEST_UTIL.startMiniCluster(1);
-<a class="jxr_linenumber" name="103" href="#103">103</a> 
-<a class="jxr_linenumber" name="104" href="#104">104</a>     tableExecutorService = <strong class="jxr_keyword">new</strong> ThreadPoolExecutor(1, POOL_SIZE, 60, TimeUnit.SECONDS,
-<a class="jxr_linenumber" name="105" href="#105">105</a>         <strong class="jxr_keyword">new</strong> SynchronousQueue&lt;Runnable&gt;(), Threads.newDaemonThreadFactory(<span class="jxr_string">"testhbck"</span>));
-<a class="jxr_linenumber" name="106" href="#106">106</a> 
-<a class="jxr_linenumber" name="107" href="#107">107</a>     hbfsckExecutorService = <strong class="jxr_keyword">new</strong> ScheduledThreadPoolExecutor(POOL_SIZE);
-<a class="jxr_linenumber" name="108" href="#108">108</a> 
-<a class="jxr_linenumber" name="109" href="#109">109</a>     AssignmentManager assignmentManager =
-<a class="jxr_linenumber" name="110" href="#110">110</a>         TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();
-<a class="jxr_linenumber" name="111" href="#111">111</a>     regionStates = assignmentManager.getRegionStates();
+<a class="jxr_linenumber" name="89" href="#89">89</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.*;
+<a class="jxr_linenumber" name="90" href="#90">90</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.*;
+<a class="jxr_linenumber" name="91" href="#91">91</a>  
+<a class="jxr_linenumber" name="92" href="#92">92</a>  @Category({MiscTests.<strong class="jxr_keyword">class</strong>, LargeTests.<strong class="jxr_keyword">class</strong>})
+<a class="jxr_linenumber" name="93" href="#93">93</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html">TestHBaseFsckOneRS</a> <strong class="jxr_keyword">extends</strong> <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html">BaseTestHBaseFsck</a> {
+<a class="jxr_linenumber" name="94" href="#94">94</a>  
+<a class="jxr_linenumber" name="95" href="#95">95</a>    @BeforeClass
+<a class="jxr_linenumber" name="96" href="#96">96</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> setUpBeforeClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="97" href="#97">97</a>      TEST_UTIL.getConfiguration().set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY,
+<a class="jxr_linenumber" name="98" href="#98">98</a>          MasterSyncObserver.<strong class="jxr_keyword">class</strong>.getName());
+<a class="jxr_linenumber" name="99" href="#99">99</a>  
+<a class="jxr_linenumber" name="100" href="#100">100</a>     conf.setInt(<span class="jxr_string">"hbase.regionserver.handler.count"</span>, 2);
+<a class="jxr_linenumber" name="101" href="#101">101</a>     conf.setInt(<span class="jxr_string">"hbase.regionserver.metahandler.count"</span>, 30);
+<a class="jxr_linenumber" name="102" href="#102">102</a> 
+<a class="jxr_linenumber" name="103" href="#103">103</a>     conf.setInt(<span class="jxr_string">"hbase.htable.threads.max"</span>, POOL_SIZE);
+<a class="jxr_linenumber" name="104" href="#104">104</a>     conf.setInt(<span class="jxr_string">"hbase.hconnection.threads.max"</span>, 2 * POOL_SIZE);
+<a class="jxr_linenumber" name="105" href="#105">105</a>     conf.setInt(<span class="jxr_string">"hbase.hconnection.threads.core"</span>, POOL_SIZE);
+<a class="jxr_linenumber" name="106" href="#106">106</a>     conf.setInt(<span class="jxr_string">"hbase.hbck.close.timeout"</span>, 2 * REGION_ONLINE_TIMEOUT);
+<a class="jxr_linenumber" name="107" href="#107">107</a>     conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, 8 * REGION_ONLINE_TIMEOUT);
+<a class="jxr_linenumber" name="108" href="#108">108</a>     TEST_UTIL.startMiniCluster(1);
+<a class="jxr_linenumber" name="109" href="#109">109</a> 
+<a class="jxr_linenumber" name="110" href="#110">110</a>     tableExecutorService = <strong class="jxr_keyword">new</strong> ThreadPoolExecutor(1, POOL_SIZE, 60, TimeUnit.SECONDS,
+<a class="jxr_linenumber" name="111" href="#111">111</a>         <strong class="jxr_keyword">new</strong> SynchronousQueue&lt;Runnable&gt;(), Threads.newDaemonThreadFactory(<span class="jxr_string">"testhbck"</span>));
 <a class="jxr_linenumber" name="112" href="#112">112</a> 
-<a class="jxr_linenumber" name="113" href="#113">113</a>     connection = (ClusterConnection) TEST_UTIL.getConnection();
+<a class="jxr_linenumber" name="113" href="#113">113</a>     hbfsckExecutorService = <strong class="jxr_keyword">new</strong> ScheduledThreadPoolExecutor(POOL_SIZE);
 <a class="jxr_linenumber" name="114" href="#114">114</a> 
-<a class="jxr_linenumber" name="115" href="#115">115</a>     admin = connection.getAdmin();
-<a class="jxr_linenumber" name="116" href="#116">116</a>     admin.setBalancerRunning(false, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="117" href="#117">117</a> 
-<a class="jxr_linenumber" name="118" href="#118">118</a>     TEST_UTIL.waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);
-<a class="jxr_linenumber" name="119" href="#119">119</a>     TEST_UTIL.waitUntilAllRegionsAssigned(TableName.NAMESPACE_TABLE_NAME);
-<a class="jxr_linenumber" name="120" href="#120">120</a>   }
-<a class="jxr_linenumber" name="121" href="#121">121</a> 
-<a class="jxr_linenumber" name="122" href="#122">122</a>   @AfterClass
-<a class="jxr_linenumber" name="123" href="#123">123</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> tearDownAfterClass() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="124" href="#124">124</a>     tableExecutorService.shutdown();
-<a class="jxr_linenumber" name="125" href="#125">125</a>     hbfsckExecutorService.shutdown();
-<a class="jxr_linenumber" name="126" href="#126">126</a>     admin.close();
-<a class="jxr_linenumber" name="127" href="#127">127</a>     TEST_UTIL.shutdownMiniCluster();
-<a class="jxr_linenumber" name="128" href="#128">128</a>   }
-<a class="jxr_linenumber" name="129" href="#129">129</a> 
-<a class="jxr_linenumber" name="130" href="#130">130</a>   @Before
-<a class="jxr_linenumber" name="131" href="#131">131</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setUp() {
-<a class="jxr_linenumber" name="132" href="#132">132</a>     EnvironmentEdgeManager.reset();
-<a class="jxr_linenumber" name="133" href="#133">133</a>   }
-<a class="jxr_linenumber" name="134" href="#134">134</a> 
+<a class="jxr_linenumber" name="115" href="#115">115</a>     AssignmentManager assignmentManager =
+<a class="jxr_linenumber" name="116" href="#116">116</a>         TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();
+<a class="jxr_linenumber" name="117" href="#117">117</a>     regionStates = assignmentManager.getRegionStates();
+<a class="jxr_linenumber" name="118" href="#118">118</a> 
+<a class="jxr_linenumber" name="119" href="#119">119</a>     connection = (ClusterConnection) TEST_UTIL.getConnection();
+<a class="jxr_linenumber" name="120" href="#120">120</a> 
+<a class="jxr_linenumber" name="121" href="#121">121</a>     admin = connection.getAdmin();
+<a class="jxr_linenumber" name="122" href="#122">122</a>     admin.setBalancerRunning(false, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="123" href="#123">123</a> 
+<a class="jxr_linenumber" name="124" href="#124">124</a>     TEST_UTIL.waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);
+<a class="jxr_linenumber" name="125" href="#125">125</a>     TEST_UTIL.waitUntilAllRegionsAssigned(TableName.NAMESPACE_TABLE_NAME);
+<a class="jxr_linenumber" name="126" href="#126">126</a>   }
+<a class="jxr_linenumber" name="127" href="#127">127</a> 
+<a class="jxr_linenumber" name="128" href="#128">128</a>   @AfterClass
+<a class="jxr_linenumber" name="129" href="#129">129</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> tearDownAfterClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="130" href="#130">130</a>     tableExecutorService.shutdown();
+<a class="jxr_linenumber" name="131" href="#131">131</a>     hbfsckExecutorService.shutdown();
+<a class="jxr_linenumber" name="132" href="#132">132</a>     admin.close();
+<a class="jxr_linenumber" name="133" href="#133">133</a>     TEST_UTIL.shutdownMiniCluster();
+<a class="jxr_linenumber" name="134" href="#134">134</a>   }
 <a class="jxr_linenumber" name="135" href="#135">135</a> 
-<a class="jxr_linenumber" name="136" href="#136">136</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="137" href="#137">137</a> <em class="jxr_javadoccomment">   * This creates a clean table and confirms that the table is clean.</em>
-<a class="jxr_linenumber" name="138" href="#138">138</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="139" href="#139">139</a>   @Test(timeout=180000)
-<a class="jxr_linenumber" name="140" href="#140">140</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testHBaseFsckClean() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="141" href="#141">141</a>     assertNoErrors(doFsck(conf, false));
-<a class="jxr_linenumber" name="142" href="#142">142</a>     TableName table = TableName.valueOf(<span class="jxr_string">"tableClean"</span>);
-<a class="jxr_linenumber" name="143" href="#143">143</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="144" href="#144">144</a>       HBaseFsck hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="145" href="#145">145</a>       assertNoErrors(hbck);
-<a class="jxr_linenumber" name="146" href="#146">146</a> 
-<a class="jxr_linenumber" name="147" href="#147">147</a>       setupTable(table);
-<a class="jxr_linenumber" name="148" href="#148">148</a>       assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="149" href="#149">149</a> 
-<a class="jxr_linenumber" name="150" href="#150">150</a>       <em class="jxr_comment">// We created 1 table, should be fine</em>
-<a class="jxr_linenumber" name="151" href="#151">151</a>       hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="152" href="#152">152</a>       assertNoErrors(hbck);
-<a class="jxr_linenumber" name="153" href="#153">153</a>       assertEquals(0, hbck.getOverlapGroups(table).size());
+<a class="jxr_linenumber" name="136" href="#136">136</a>   @Before
+<a class="jxr_linenumber" name="137" href="#137">137</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setUp() {
+<a class="jxr_linenumber" name="138" href="#138">138</a>     EnvironmentEdgeManager.reset();
+<a class="jxr_linenumber" name="139" href="#139">139</a>   }
+<a class="jxr_linenumber" name="140" href="#140">140</a> 
+<a class="jxr_linenumber" name="141" href="#141">141</a> 
+<a class="jxr_linenumber" name="142" href="#142">142</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="143" href="#143">143</a> <em class="jxr_javadoccomment">   * This creates a clean table and confirms that the table is clean.</em>
+<a class="jxr_linenumber" name="144" href="#144">144</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="145" href="#145">145</a>   @Test(timeout=180000)
+<a class="jxr_linenumber" name="146" href="#146">146</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testHBaseFsckClean() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="147" href="#147">147</a>     assertNoErrors(doFsck(conf, false));
+<a class="jxr_linenumber" name="148" href="#148">148</a>     TableName table = TableName.valueOf(<span class="jxr_string">"tableClean"</span>);
+<a class="jxr_linenumber" name="149" href="#149">149</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="150" href="#150">150</a>       HBaseFsck hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="151" href="#151">151</a>       assertNoErrors(hbck);
+<a class="jxr_linenumber" name="152" href="#152">152</a> 
+<a class="jxr_linenumber" name="153" href="#153">153</a>       setupTable(table);
 <a class="jxr_linenumber" name="154" href="#154">154</a>       assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="155" href="#155">155</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="156" href="#156">156</a>       cleanupTable(table);
-<a class="jxr_linenumber" name="157" href="#157">157</a>     }
-<a class="jxr_linenumber" name="158" href="#158">158</a>   }
-<a class="jxr_linenumber" name="159" href="#159">159</a> 
-<a class="jxr_linenumber" name="160" href="#160">160</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="161" href="#161">161</a> <em class="jxr_javadoccomment">   * Test thread pooling in the case where there are more regions than threads</em>
-<a class="jxr_linenumber" name="162" href="#162">162</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="163" href="#163">163</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="164" href="#164">164</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testHbckThreadpooling() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="165" href="#165">165</a>     TableName table =
-<a class="jxr_linenumber" name="166" href="#166">166</a>         TableName.valueOf(<span class="jxr_string">"tableDupeStartKey"</span>);
-<a class="jxr_linenumber" name="167" href="#167">167</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="168" href="#168">168</a>       <em class="jxr_comment">// Create table with 4 regions</em>
-<a class="jxr_linenumber" name="169" href="#169">169</a>       setupTable(table);
-<a class="jxr_linenumber" name="170" href="#170">170</a> 
-<a class="jxr_linenumber" name="171" href="#171">171</a>       <em class="jxr_comment">// limit number of threads to 1.</em>
-<a class="jxr_linenumber" name="172" href="#172">172</a>       Configuration newconf = <strong class="jxr_keyword">new</strong> Configuration(conf);
-<a class="jxr_linenumber" name="173" href="#173">173</a>       newconf.setInt(<span class="jxr_string">"hbasefsck.numthreads"</span>, 1);
-<a class="jxr_linenumber" name="174" href="#174">174</a>       assertNoErrors(doFsck(newconf, false));
-<a class="jxr_linenumber" name="175" href="#175">175</a> 
-<a class="jxr_linenumber" name="176" href="#176">176</a>       <em class="jxr_comment">// We should pass without triggering a RejectedExecutionException</em>
-<a class="jxr_linenumber" name="177" href="#177">177</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="178" href="#178">178</a>       cleanupTable(table);
-<a class="jxr_linenumber" name="179" href="#179">179</a>     }
-<a class="jxr_linenumber" name="180" href="#180">180</a>   }
+<a class="jxr_linenumber" name="155" href="#155">155</a> 
+<a class="jxr_linenumber" name="156" href="#156">156</a>       <em class="jxr_comment">// We created 1 table, should be fine</em>
+<a class="jxr_linenumber" name="157" href="#157">157</a>       hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="158" href="#158">158</a>       assertNoErrors(hbck);
+<a class="jxr_linenumber" name="159" href="#159">159</a>       assertEquals(0, hbck.getOverlapGroups(table).size());
+<a class="jxr_linenumber" name="160" href="#160">160</a>       assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="161" href="#161">161</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="162" href="#162">162</a>       cleanupTable(table);
+<a class="jxr_linenumber" name="163" href="#163">163</a>     }
+<a class="jxr_linenumber" name="164" href="#164">164</a>   }
+<a class="jxr_linenumber" name="165" href="#165">165</a> 
+<a class="jxr_linenumber" name="166" href="#166">166</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="167" href="#167">167</a> <em class="jxr_javadoccomment">   * Test thread pooling in the case where there are more regions than threads</em>
+<a class="jxr_linenumber" name="168" href="#168">168</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="169" href="#169">169</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="170" href="#170">170</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testHbckThreadpooling() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="171" href="#171">171</a>     TableName table =
+<a class="jxr_linenumber" name="172" href="#172">172</a>         TableName.valueOf(<span class="jxr_string">"tableDupeStartKey"</span>);
+<a class="jxr_linenumber" name="173" href="#173">173</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="174" href="#174">174</a>       <em class="jxr_comment">// Create table with 4 regions</em>
+<a class="jxr_linenumber" name="175" href="#175">175</a>       setupTable(table);
+<a class="jxr_linenumber" name="176" href="#176">176</a> 
+<a class="jxr_linenumber" name="177" href="#177">177</a>       <em class="jxr_comment">// limit number of threads to 1.</em>
+<a class="jxr_linenumber" name="178" href="#178">178</a>       Configuration newconf = <strong class="jxr_keyword">new</strong> Configuration(conf);
+<a class="jxr_linenumber" name="179" href="#179">179</a>       newconf.setInt(<span class="jxr_string">"hbasefsck.numthreads"</span>, 1);
+<a class="jxr_linenumber" name="180" href="#180">180</a>       assertNoErrors(doFsck(newconf, false));
 <a class="jxr_linenumber" name="181" href="#181">181</a> 
-<a class="jxr_linenumber" name="182" href="#182">182</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="183" href="#183">183</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testTableWithNoRegions() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="184" href="#184">184</a>     <em class="jxr_comment">// We might end up with empty regions in a table</em>
-<a class="jxr_linenumber" name="185" href="#185">185</a>     <em class="jxr_comment">// see also testNoHdfsTable()</em>
-<a class="jxr_linenumber" name="186" href="#186">186</a>     TableName table =
-<a class="jxr_linenumber" name="187" href="#187">187</a>         TableName.valueOf(name.getMethodName());
-<a class="jxr_linenumber" name="188" href="#188">188</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="189" href="#189">189</a>       <em class="jxr_comment">// create table with one region</em>
-<a class="jxr_linenumber" name="190" href="#190">190</a>       HTableDescriptor desc = <strong class="jxr_keyword">new</strong> HTableDescriptor(table);
-<a class="jxr_linenumber" name="191" href="#191">191</a>       HColumnDescriptor hcd = <strong class="jxr_keyword">new</strong> HColumnDescriptor(Bytes.toString(FAM));
-<a class="jxr_linenumber" name="192" href="#192">192</a>       desc.addFamily(hcd); <em class="jxr_comment">// If a table has no CF's it doesn't get checked</em>
-<a class="jxr_linenumber" name="193" href="#193">193</a>       createTable(TEST_UTIL, desc, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="194" href="#194">194</a>       tbl = connection.getTable(table, tableExecutorService);
-<a class="jxr_linenumber" name="195" href="#195">195</a> 
-<a class="jxr_linenumber" name="196" href="#196">196</a>       <em class="jxr_comment">// Mess it up by leaving a hole in the assignment, meta, and hdfs data</em>
-<a class="jxr_linenumber" name="197" href="#197">197</a>       deleteRegion(conf, tbl.getTableDescriptor(), HConstants.EMPTY_START_ROW,
-<a class="jxr_linenumber" name="198" href="#198">198</a>           HConstants.EMPTY_END_ROW, false, false, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="199" href="#199">199</a> 
-<a class="jxr_linenumber" name="200" href="#200">200</a>       HBaseFsck hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="201" href="#201">201</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });
-<a class="jxr_linenumber" name="202" href="#202">202</a> 
-<a class="jxr_linenumber" name="203" href="#203">203</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="204" href="#204">204</a> 
-<a class="jxr_linenumber" name="205" href="#205">205</a>       <em class="jxr_comment">// fix hole</em>
-<a class="jxr_linenumber" name="206" href="#206">206</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="207" href="#207">207</a> 
-<a class="jxr_linenumber" name="208" href="#208">208</a>       <em class="jxr_comment">// check that hole fixed</em>
-<a class="jxr_linenumber" name="209" href="#209">209</a>       assertNoErrors(doFsck(conf, false));
-<a class="jxr_linenumber" name="210" href="#210">210</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="211" href="#211">211</a>       cleanupTable(table);
-<a class="jxr_linenumber" name="212" href="#212">212</a>     }
-<a class="jxr_linenumber" name="213" href="#213">213</a>   }
-<a class="jxr_linenumber" name="214" href="#214">214</a> 
-<a class="jxr_linenumber" name="215" href="#215">215</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="216" href="#216">216</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testHbckFixOrphanTable() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="217" href="#217">217</a>     TableName table = TableName.valueOf(<span class="jxr_string">"tableInfo"</span>);
-<a class="jxr_linenumber" name="218" href="#218">218</a>     FileSystem fs = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="219" href="#219">219</a>     Path tableinfo = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="220" href="#220">220</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="221" href="#221">221</a>       setupTable(table);
-<a class="jxr_linenumber" name="222" href="#222">222</a> 
-<a class="jxr_linenumber" name="223" href="#223">223</a>       Path hbaseTableDir = FSUtils.getTableDir(
-<a class="jxr_linenumber" name="224" href="#224">224</a>           FSUtils.getRootDir(conf), table);
-<a class="jxr_linenumber" name="225" href="#225">225</a>       fs = hbaseTableDir.getFileSystem(conf);
-<a class="jxr_linenumber" name="226" href="#226">226</a>       FileStatus status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);
-<a class="jxr_linenumber" name="227" href="#227">227</a>       tableinfo = status.getPath();
-<a class="jxr_linenumber" name="228" href="#228">228</a>       fs.rename(tableinfo, <strong class="jxr_keyword">new</strong> Path(<span class="jxr_string">"/.tableinfo"</span>));
-<a class="jxr_linenumber" name="229" href="#229">229</a> 
-<a class="jxr_linenumber" name="230" href="#230">230</a>       <em class="jxr_comment">//to report error if .tableinfo is missing.</em>
-<a class="jxr_linenumber" name="231" href="#231">231</a>       HBaseFsck hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="232" href="#232">232</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NO_TABLEINFO_FILE });
-<a class="jxr_linenumber" name="233" href="#233">233</a> 
-<a class="jxr_linenumber" name="234" href="#234">234</a>       <em class="jxr_comment">// fix OrphanTable with default .tableinfo (htd not yet cached on master)</em>
-<a class="jxr_linenumber" name="235" href="#235">235</a>       hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="236" href="#236">236</a>       assertNoErrors(hbck);
-<a class="jxr_linenumber" name="237" href="#237">237</a>       status = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="238" href="#238">238</a>       status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);
-<a class="jxr_linenumber" name="239" href="#239">239</a>       assertNotNull(status);
-<a class="jxr_linenumber" name="240" href="#240">240</a> 
-<a class="jxr_linenumber" name="241" href="#241">241</a>       HTableDescriptor htd = admin.getTableDescriptor(table);
-<a class="jxr_linenumber" name="242" href="#242">242</a>       htd.setValue(<span class="jxr_string">"NOT_DEFAULT"</span>, <span class="jxr_string">"true"</span>);
-<a class="jxr_linenumber" name="243" href="#243">243</a>       admin.disableTable(table);
-<a class="jxr_linenumber" name="244" href="#244">244</a>       admin.modifyTable(table, htd);
-<a class="jxr_linenumber" name="245" href="#245">245</a>       admin.enableTable(table);
-<a class="jxr_linenumber" name="246" href="#246">246</a>       fs.delete(status.getPath(), <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="247" href="#247">247</a> 
-<a class="jxr_linenumber" name="248" href="#248">248</a>       <em class="jxr_comment">// fix OrphanTable with cache</em>
-<a class="jxr_linenumber" name="249" href="#249">249</a>       htd = admin.getTableDescriptor(table); <em class="jxr_comment">// warms up cached htd on master</em>
-<a class="jxr_linenumber" name="250" href="#250">250</a>       hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="251" href="#251">251</a>       assertNoErrors(hbck);
-<a class="jxr_linenumber" name="252" href="#252">252</a>       status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);
-<a class="jxr_linenumber" name="253" href="#253">253</a>       assertNotNull(status);
-<a class="jxr_linenumber" name="254" href="#254">254</a>       htd = admin.getTableDescriptor(table);
-<a class="jxr_linenumber" name="255" href="#255">255</a>       assertEquals(htd.getValue(<span class="jxr_string">"NOT_DEFAULT"</span>), <span class="jxr_string">"true"</span>);
-<a class="jxr_linenumber" name="256" href="#256">256</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="257" href="#257">257</a>       <strong class="jxr_keyword">if</strong> (fs != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="258" href="#258">258</a>         fs.rename(<strong class="jxr_keyword">new</strong> Path(<span class="jxr_string">"/.tableinfo"</span>), tableinfo);
-<a class="jxr_linenumber" name="259" href="#259">259</a>       }
-<a class="jxr_linenumber" name="260" href="#260">260</a>       cleanupTable(table);
-<a class="jxr_linenumber" name="261" href="#261">261</a>     }
-<a class="jxr_linenumber" name="262" href="#262">262</a>   }
-<a class="jxr_linenumber" name="263" href="#263">263</a> 
-<a class="jxr_linenumber" name="264" href="#264">264</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="265" href="#265">265</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testReadOnlyProperty() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="266" href="#266">266</a>     HBaseFsck hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="267" href="#267">267</a>     Assert.assertEquals(<span class="jxr_string">"shouldIgnorePreCheckPermission"</span>, <strong class="jxr_keyword">true</strong>,
-<a class="jxr_linenumber" name="268" href="#268">268</a>         hbck.shouldIgnorePreCheckPermission());
+<a class="jxr_linenumber" name="182" href="#182">182</a>       <em class="jxr_comment">// We should pass without triggering a RejectedExecutionException</em>
+<a class="jxr_linenumber" name="183" href="#183">183</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="184" href="#184">184</a>       cleanupTable(table);
+<a class="jxr_linenumber" name="185" href="#185">185</a>     }
+<a class="jxr_linenumber" name="186" href="#186">186</a>   }
+<a class="jxr_linenumber" name="187" href="#187">187</a> 
+<a class="jxr_linenumber" name="188" href="#188">188</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="189" href="#189">189</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testTableWithNoRegions() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="190" href="#190">190</a>     <em class="jxr_comment">// We might end up with empty regions in a table</em>
+<a class="jxr_linenumber" name="191" href="#191">191</a>     <em class="jxr_comment">// see also testNoHdfsTable()</em>
+<a class="jxr_linenumber" name="192" href="#192">192</a>     TableName table =
+<a class="jxr_linenumber" name="193" href="#193">193</a>         TableName.valueOf(name.getMethodName());
+<a class="jxr_linenumber" name="194" href="#194">194</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="195" href="#195">195</a>       <em class="jxr_comment">// create table with one region</em>
+<a class="jxr_linenumber" name="196" href="#196">196</a>       HTableDescriptor desc = <strong class="jxr_keyword">new</strong> HTableDescriptor(table);
+<a class="jxr_linenumber" name="197" href="#197">197</a>       HColumnDescriptor hcd = <strong class="jxr_keyword">new</strong> HColumnDescriptor(Bytes.toString(FAM));
+<a class="jxr_linenumber" name="198" href="#198">198</a>       desc.addFamily(hcd); <em class="jxr_comment">// If a table has no CF's it doesn't get checked</em>
+<a class="jxr_linenumber" name="199" href="#199">199</a>       createTable(TEST_UTIL, desc, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="200" href="#200">200</a>       tbl = connection.getTable(table, tableExecutorService);
+<a class="jxr_linenumber" name="201" href="#201">201</a> 
+<a class="jxr_linenumber" name="202" href="#202">202</a>       <em class="jxr_comment">// Mess it up by leaving a hole in the assignment, meta, and hdfs data</em>
+<a class="jxr_linenumber" name="203" href="#203">203</a>       deleteRegion(conf, tbl.getTableDescriptor(), HConstants.EMPTY_START_ROW,
+<a class="jxr_linenumber" name="204" href="#204">204</a>           HConstants.EMPTY_END_ROW, false, false, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="205" href="#205">205</a> 
+<a class="jxr_linenumber" name="206" href="#206">206</a>       HBaseFsck hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="207" href="#207">207</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });
+<a class="jxr_linenumber" name="208" href="#208">208</a> 
+<a class="jxr_linenumber" name="209" href="#209">209</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="210" href="#210">210</a> 
+<a class="jxr_linenumber" name="211" href="#211">211</a>       <em class="jxr_comment">// fix hole</em>
+<a class="jxr_linenumber" name="212" href="#212">212</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="213" href="#213">213</a> 
+<a class="jxr_linenumber" name="214" href="#214">214</a>       <em class="jxr_comment">// check that hole fixed</em>
+<a class="jxr_linenumber" name="215" href="#215">215</a>       assertNoErrors(doFsck(conf, false));
+<a class="jxr_linenumber" name="216" href="#216">216</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="217" href="#217">217</a>       cleanupTable(table);
+<a class="jxr_linenumber" name="218" href="#218">218</a>     }
+<a class="jxr_linenumber" name="219" href="#219">219</a>   }
+<a class="jxr_linenumber" name="220" href="#220">220</a> 
+<a class="jxr_linenumber" name="221" href="#221">221</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="222" href="#222">222</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testHbckFixOrphanTable() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="223" href="#223">223</a>     TableName table = TableName.valueOf(<span class="jxr_string">"tableInfo"</span>);
+<a class="jxr_linenumber" name="224" href="#224">224</a>     FileSystem fs = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="225" href="#225">225</a>     Path tableinfo = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="226" href="#226">226</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="227" href="#227">227</a>       setupTable(table);
+<a class="jxr_linenumber" name="228" href="#228">228</a> 
+<a class="jxr_linenumber" name="229" href="#229">229</a>       Path hbaseTableDir = FSUtils.getTableDir(
+<a class="jxr_linenumber" name="230" href="#230">230</a>           FSUtils.getRootDir(conf), table);
+<a class="jxr_linenumber" name="231" href="#231">231</a>       fs = hbaseTableDir.getFileSystem(conf);
+<a class="jxr_linenumber" name="232" href="#232">232</a>       FileStatus status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);
+<a class="jxr_linenumber" name="233" href="#233">233</a>       tableinfo = status.getPath();
+<a class="jxr_linenumber" name="234" href="#234">234</a>       fs.rename(tableinfo, <strong class="jxr_keyword">new</strong> Path(<span class="jxr_string">"/.tableinfo"</span>));
+<a class="jxr_linenumber" name="235" href="#235">235</a> 
+<a class="jxr_linenumber" name="236" href="#236">236</a>       <em class="jxr_comment">//to report error if .tableinfo is missing.</em>
+<a class="jxr_linenumber" name="237" href="#237">237</a>       HBaseFsck hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="238" href="#238">238</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NO_TABLEINFO_FILE });
+<a class="jxr_linenumber" name="239" href="#239">239</a> 
+<a class="jxr_linenumber" name="240" href="#240">240</a>       <em class="jxr_comment">// fix OrphanTable with default .tableinfo (htd not yet cached on master)</em>
+<a class="jxr_linenumber" name="241" href="#241">241</a>       hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="242" href="#242">242</a>       assertNoErrors(hbck);
+<a class="jxr_linenumber" name="243" href="#243">243</a>       status = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="244" href="#244">244</a>       status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);
+<a class="jxr_linenumber" name="245" href="#245">245</a>       assertNotNull(status);
+<a class="jxr_linenumber" name="246" href="#246">246</a> 
+<a class="jxr_linenumber" name="247" href="#247">247</a>       HTableDescriptor htd = admin.getTableDescriptor(table);
+<a class="jxr_linenumber" name="248" href="#248">248</a>       htd.setValue(<span class="jxr_string">"NOT_DEFAULT"</span>, <span class="jxr_string">"true"</span>);
+<a class="jxr_linenumber" name="249" href="#249">249</a>       admin.disableTable(table);
+<a class="jxr_linenumber" name="250" href="#250">250</a>       admin.modifyTable(table, htd);
+<a class="jxr_linenumber" name="251" href="#251">251</a>       admin.enableTable(table);
+<a class="jxr_linenumber" name="252" href="#252">252</a>       fs.delete(status.getPath(), <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="253" href="#253">253</a> 
+<a class="jxr_linenumber" name="254" href="#254">254</a>       <em class="jxr_comment">// fix OrphanTable with cache</em>
+<a class="jxr_linenumber" name="255" href="#255">255</a>       htd = admin.getTableDescriptor(table); <em class="jxr_comment">// warms up cached htd on master</em>
+<a class="jxr_linenumber" name="256" href="#256">256</a>       hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="257" href="#257">257</a>       assertNoErrors(hbck);
+<a class="jxr_linenumber" name="258" href="#258">258</a>       status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);
+<a class="jxr_linenumber" name="259" href="#259">259</a>       assertNotNull(status);
+<a class="jxr_linenumber" name="260" href="#260">260</a>       htd = admin.getTableDescriptor(table);
+<a class="jxr_linenumber" name="261" href="#261">261</a>       assertEquals(htd.getValue(<span class="jxr_string">"NOT_DEFAULT"</span>), <span class="jxr_string">"true"</span>);
+<a class="jxr_linenumber" name="262" href="#262">262</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="263" href="#263">263</a>       <strong class="jxr_keyword">if</strong> (fs != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="264" href="#264">264</a>         fs.rename(<strong class="jxr_keyword">new</strong> Path(<span class="jxr_string">"/.tableinfo"</span>), tableinfo);
+<a class="jxr_linenumber" name="265" href="#265">265</a>       }
+<a class="jxr_linenumber" name="266" href="#266">266</a>       cleanupTable(table);
+<a class="jxr_linenumber" name="267" href="#267">267</a>     }
+<a class="jxr_linenumber" name="268" href="#268">268</a>   }
 <a class="jxr_linenumber" name="269" href="#269">269</a> 
-<a class="jxr_linenumber" name="270" href="#270">270</a>     hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="271" href="#271">271</a>     Assert.assertEquals(<span class="jxr_string">"shouldIgnorePreCheckPermission"</span>, false,
-<a class="jxr_linenumber" name="272" href="#272">272</a>         hbck.shouldIgnorePreCheckPermission());
-<a class="jxr_linenumber" name="273" href="#273">273</a> 
-<a class="jxr_linenumber" name="274" href="#274">274</a>     hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="275" href="#275">275</a>     hbck.setIgnorePreCheckPermission(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="276" href="#276">276</a>     Assert.assertEquals(<span class="jxr_string">"shouldIgnorePreCheckPermission"</span>, <strong class="jxr_keyword">true</strong>,
-<a class="jxr_linenumber" name="277" href="#277">277</a>         hbck.shouldIgnorePreCheckPermission());
-<a class="jxr_linenumber" name="278" href="#278">278</a>   }
+<a class="jxr_linenumber" name="270" href="#270">270</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="271" href="#271">271</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testReadOnlyProperty() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="272" href="#272">272</a>     HBaseFsck hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="273" href="#273">273</a>     Assert.assertEquals(<span class="jxr_string">"shouldIgnorePreCheckPermission"</span>, <strong class="jxr_keyword">true</strong>,
+<a class="jxr_linenumber" name="274" href="#274">274</a>         hbck.shouldIgnorePreCheckPermission());
+<a class="jxr_linenumber" name="275" href="#275">275</a> 
+<a class="jxr_linenumber" name="276" href="#276">276</a>     hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="277" href="#277">277</a>     Assert.assertEquals(<span class="jxr_string">"shouldIgnorePreCheckPermission"</span>, false,
+<a class="jxr_linenumber" name="278" href="#278">278</a>         hbck.shouldIgnorePreCheckPermission());
 <a class="jxr_linenumber" name="279" href="#279">279</a> 
-<a class="jxr_linenumber" name="280" href="#280">280</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="281" href="#281">281</a> <em class="jxr_javadoccomment">   * This creates and fixes a bad table where a region is completely contained</em>
-<a class="jxr_linenumber" name="282" href="#282">282</a> <em class="jxr_javadoccomment">   * by another region, and there is a hole (sort of like a bad split)</em>
-<a class="jxr_linenumber" name="283" href="#283">283</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="284" href="#284">284</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="285" href="#285">285</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testOverlapAndOrphan() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="286" href="#286">286</a>     TableName table =
-<a class="jxr_linenumber" name="287" href="#287">287</a>         TableName.valueOf(<span class="jxr_string">"tableOverlapAndOrphan"</span>);
-<a class="jxr_linenumber" name="288" href="#288">288</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="289" href="#289">289</a>       setupTable(table);
-<a class="jxr_linenumber" name="290" href="#290">290</a>       assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="291" href="#291">291</a> 
-<a class="jxr_linenumber" name="292" href="#292">292</a>       <em class="jxr_comment">// Mess it up by creating an overlap in the metadata</em>
-<a class="jxr_linenumber" name="293" href="#293">293</a>       admin.disableTable(table);
-<a class="jxr_linenumber" name="294" href="#294">294</a>       deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"A"</span>), Bytes.toBytes(<span class="jxr_string">"B"</span>), <strong class="jxr_keyword">true</strong>,
-<a class="jxr_linenumber" name="295" href="#295">295</a>           <strong class="jxr_keyword">true</strong>, false, <strong class="jxr_keyword">true</strong>, HRegionInfo.DEFAULT_REPLICA_ID);
-<a class="jxr_linenumber" name="296" href="#296">296</a>       admin.enableTable(table);
+<a class="jxr_linenumber" name="280" href="#280">280</a>     hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="281" href="#281">281</a>     hbck.setIgnorePreCheckPermission(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="282" href="#282">282</a>     Assert.assertEquals(<span class="jxr_string">"shouldIgnorePreCheckPermission"</span>, <strong class="jxr_keyword">true</strong>,
+<a class="jxr_linenumber" name="283" href="#283">283</a>         hbck.shouldIgnorePreCheckPermission());
+<a class="jxr_linenumber" name="284" href="#284">284</a>   }
+<a class="jxr_linenumber" name="285" href="#285">285</a> 
+<a class="jxr_linenumber" name="286" href="#286">286</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="287" href="#287">287</a> <em class="jxr_javadoccomment">   * This creates and fixes a bad table where a region is completely contained</em>
+<a class="jxr_linenumber" name="288" href="#288">288</a> <em class="jxr_javadoccomment">   * by another region, and there is a hole (sort of like a bad split)</em>
+<a class="jxr_linenumber" name="289" href="#289">289</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="290" href="#290">290</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="291" href="#291">291</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testOverlapAndOrphan() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="292" href="#292">292</a>     TableName table =
+<a class="jxr_linenumber" name="293" href="#293">293</a>         TableName.valueOf(<span class="jxr_string">"tableOverlapAndOrphan"</span>);
+<a class="jxr_linenumber" name="294" href="#294">294</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="295" href="#295">295</a>       setupTable(table);
+<a class="jxr_linenumber" name="296" href="#296">296</a>       assertEquals(ROWKEYS.length, countRows());
 <a class="jxr_linenumber" name="297" href="#297">297</a> 
-<a class="jxr_linenumber" name="298" href="#298">298</a>       HRegionInfo hriOverlap =
-<a class="jxr_linenumber" name="299" href="#299">299</a>           createRegion(tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"A2"</span>), Bytes.toBytes(<span class="jxr_string">"B"</span>));
-<a class="jxr_linenumber" name="300" href="#300">300</a>       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
-<a class="jxr_linenumber" name="301" href="#301">301</a>       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
-<a class="jxr_linenumber" name="302" href="#302">302</a>           .waitForAssignment(hriOverlap);
-<a class="jxr_linenumber" name="303" href="#303">303</a>       ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
-<a class="jxr_linenumber" name="304" href="#304">304</a>       TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
-<a class="jxr_linenumber" name="305" href="#305">305</a> 
-<a class="jxr_linenumber" name="306" href="#306">306</a>       HBaseFsck hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="307" href="#307">307</a>       assertErrors(hbck,
-<a class="jxr_linenumber" name="308" href="#308">308</a>           <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.ORPHAN_HDFS_REGION, HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,
-<a class="jxr_linenumber" name="309" href="#309">309</a>               HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });
-<a class="jxr_linenumber" name="310" href="#310">310</a> 
-<a class="jxr_linenumber" name="311" href="#311">311</a>       <em class="jxr_comment">// fix the problem.</em>
-<a class="jxr_linenumber" name="312" href="#312">312</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="313" href="#313">313</a> 
-<a class="jxr_linenumber" name="314" href="#314">314</a>       <em class="jxr_comment">// verify that overlaps are fixed</em>
-<a class="jxr_linenumber" name="315" href="#315">315</a>       HBaseFsck hbck2 = doFsck(conf,false);
-<a class="jxr_linenumber" name="316" href="#316">316</a>       assertNoErrors(hbck2);
-<a class="jxr_linenumber" name="317" href="#317">317</a>       assertEquals(0, hbck2.getOverlapGroups(table).size());
-<a class="jxr_linenumber" name="318" href="#318">318</a>       assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="319" href="#319">319</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="320" href="#320">320</a>       cleanupTable(table);
-<a class="jxr_linenumber" name="321" href="#321">321</a>     }
-<a class="jxr_linenumber" name="322" href="#322">322</a>   }
-<a class="jxr_linenumber" name="323" href="#323">323</a> 
-<a class="jxr_linenumber" name="324" href="#324">324</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="325" href="#325">325</a> <em class="jxr_javadoccomment">   * This creates and fixes a bad table where a region overlaps two regions --</em>
-<a class="jxr_linenumber" name="326" href="#326">326</a> <em class="jxr_javadoccomment">   * a start key contained in another region and its end key is contained in</em>
-<a class="jxr_linenumber" name="327" href="#327">327</a> <em class="jxr_javadoccomment">   * yet another region.</em>
-<a class="jxr_linenumber" name="328" href="#328">328</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="329" href="#329">329</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="330" href="#330">330</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCoveredStartKey() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="331" href="#331">331</a>     TableName table =
-<a class="jxr_linenumber" name="332" href="#332">332</a>         TableName.valueOf(<span class="jxr_string">"tableCoveredStartKey"</span>);
-<a class="jxr_linenumber" name="333" href="#333">333</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="334" href="#334">334</a>       setupTable(table);
-<a class="jxr_linenumber" name="335" href="#335">335</a>       assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="336" href="#336">336</a> 
-<a class="jxr_linenumber" name="337" href="#337">337</a>       <em class="jxr_comment">// Mess it up by creating an overlap in the metadata</em>
-<a class="jxr_linenumber" name="338" href="#338">338</a>       HRegionInfo hriOverlap =
-<a class="jxr_linenumber" name="339" href="#339">339</a>           createRegion(tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"A2"</span>), Bytes.toBytes(<span class="jxr_string">"B2"</span>));
-<a class="jxr_linenumber" name="340" href="#340">340</a>       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
-<a class="jxr_linenumber" name="341" href="#341">341</a>       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
-<a class="jxr_linenumber" name="342" href="#342">342</a>           .waitForAssignment(hriOverlap);
-<a class="jxr_linenumber" name="343" href="#343">343</a>       ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
-<a class="jxr_linenumber" name="344" href="#344">344</a>       TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
-<a class="jxr_linenumber" name="345" href="#345">345</a> 
-<a class="jxr_linenumber" name="346" href="#346">346</a>       HBaseFsck hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="347" href="#347">347</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN,
-<a class="jxr_linenumber" name="348" href="#348">348</a>           HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN });
-<a class="jxr_linenumber" name="349" href="#349">349</a>       assertEquals(3, hbck.getOverlapGroups(table).size());
-<a class="jxr_linenumber" name="350" href="#350">350</a>       assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="298" href="#298">298</a>       <em class="jxr_comment">// Mess it up by creating an overlap in the metadata</em>
+<a class="jxr_linenumber" name="299" href="#299">299</a>       admin.disableTable(table);
+<a class="jxr_linenumber" name="300" href="#300">300</a>       deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"A"</span>), Bytes.toBytes(<span class="jxr_string">"B"</span>), <strong class="jxr_keyword">true</strong>,
+<a class="jxr_linenumber" name="301" href="#301">301</a>           <strong class="jxr_keyword">true</strong>, false, <strong class="jxr_keyword">true</strong>, HRegionInfo.DEFAULT_REPLICA_ID);
+<a class="jxr_linenumber" name="302" href="#302">302</a>       admin.enableTable(table);
+<a class="jxr_linenumber" name="303" href="#303">303</a> 
+<a class="jxr_linenumber" name="304" href="#304">304</a>       HRegionInfo hriOverlap =
+<a class="jxr_linenumber" name="305" href="#305">305</a>           createRegion(tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"A2"</span>), Bytes.toBytes(<span class="jxr_string">"B"</span>));
+<a class="jxr_linenumber" name="306" href="#306">306</a>       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
+<a class="jxr_linenumber" name="307" href="#307">307</a>       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
+<a class="jxr_linenumber" name="308" href="#308">308</a>           .waitForAssignment(hriOverlap);
+<a class="jxr_linenumber" name="309" href="#309">309</a>       ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+<a class="jxr_linenumber" name="310" href="#310">310</a>       TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
+<a class="jxr_linenumber" name="311" href="#311">311</a> 
+<a class="jxr_linenumber" name="312" href="#312">312</a>       HBaseFsck hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="313" href="#313">313</a>       assertErrors(hbck,
+<a class="jxr_linenumber" name="314" href="#314">314</a>           <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.ORPHAN_HDFS_REGION, HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,
+<a class="jxr_linenumber" name="315" href="#315">315</a>               HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });
+<a class="jxr_linenumber" name="316" href="#316">316</a> 
+<a class="jxr_linenumber" name="317" href="#317">317</a>       <em class="jxr_comment">// fix the problem.</em>
+<a class="jxr_linenumber" name="318" href="#318">318</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="319" href="#319">319</a> 
+<a class="jxr_linenumber" name="320" href="#320">320</a>       <em class="jxr_comment">// verify that overlaps are fixed</em>
+<a class="jxr_linenumber" name="321" href="#321">321</a>       HBaseFsck hbck2 = doFsck(conf,false);
+<a class="jxr_linenumber" name="322" href="#322">322</a>       assertNoErrors(hbck2);
+<a class="jxr_linenumber" name="323" href="#323">323</a>       assertEquals(0, hbck2.getOverlapGroups(table).size());
+<a class="jxr_linenumber" name="324" href="#324">324</a>       assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="325" href="#325">325</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="326" href="#326">326</a>       cleanupTable(table);
+<a class="jxr_linenumber" name="327" href="#327">327</a>     }
+<a class="jxr_linenumber" name="328" href="#328">328</a>   }
+<a class="jxr_linenumber" name="329" href="#329">329</a> 
+<a class="jxr_linenumber" name="330" href="#330">330</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="331" href="#331">331</a> <em class="jxr_javadoccomment">   * This creates and fixes a bad table where a region overlaps two regions --</em>
+<a class="jxr_linenumber" name="332" href="#332">332</a> <em class="jxr_javadoccomment">   * a start key contained in another region and its end key is contained in</em>
+<a class="jxr_linenumber" name="333" href="#333">333</a> <em class="jxr_javadoccomment">   * yet another region.</em>
+<a class="jxr_linenumber" name="334" href="#334">334</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="335" href="#335">335</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="336" href="#336">336</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCoveredStartKey() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="337" href="#337">337</a>     TableName table =
+<a class="jxr_linenumber" name="338" href="#338">338</a>         TableName.valueOf(<span class="jxr_string">"tableCoveredStartKey"</span>);
+<a class="jxr_linenumber" name="339" href="#339">339</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="340" href="#340">340</a>       setupTable(table);
+<a class="jxr_linenumber" name="341" href="#341">341</a>       assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="342" href="#342">342</a> 
+<a class="jxr_linenumber" name="343" href="#343">343</a>       <em class="jxr_comment">// Mess it up by creating an overlap in the metadata</em>
+<a class="jxr_linenumber" name="344" href="#344">344</a>       HRegionInfo hriOverlap =
+<a class="jxr_linenumber" name="345" href="#345">345</a>           createRegion(tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"A2"</span>), Bytes.toBytes(<span class="jxr_string">"B2"</span>));
+<a class="jxr_linenumber" name="346" href="#346">346</a>       TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
+<a class="jxr_linenumber" name="347" href="#347">347</a>       TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
+<a class="jxr_linenumber" name="348" href="#348">348</a>           .waitForAssignment(hriOverlap);
+<a class="jxr_linenumber" name="349" href="#349">349</a>       ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+<a class="jxr_linenumber" name="350" href="#350">350</a>       TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
 <a class="jxr_linenumber" name="351" href="#351">351</a> 
-<a class="jxr_linenumber" name="352" href="#352">352</a>       <em class="jxr_comment">// fix the problem.</em>
-<a class="jxr_linenumber" name="353" href="#353">353</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="354" href="#354">354</a> 
-<a class="jxr_linenumber" name="355" href="#355">355</a>       <em class="jxr_comment">// verify that overlaps are fixed</em>
-<a class="jxr_linenumber" name="356" href="#356">356</a>       HBaseFsck hbck2 = doFsck(conf, false);
-<a class="jxr_linenumber" name="357" href="#357">357</a>       assertErrors(hbck2, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[0]);
-<a class="jxr_linenumber" name="358" href="#358">358</a>       assertEquals(0, hbck2.getOverlapGroups(table).size());
-<a class="jxr_linenumber" name="359" href="#359">359</a>       assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="360" href="#360">360</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="361" href="#361">361</a>       cleanupTable(table);
-<a class="jxr_linenumber" name="362" href="#362">362</a>     }
-<a class="jxr_linenumber" name="363" href="#363">363</a>   }
-<a class="jxr_linenumber" name="364" href="#364">364</a> 
-<a class="jxr_linenumber" name="365" href="#365">365</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="366" href="#366">366</a> <em class="jxr_javadoccomment">   * This creates and fixes a bad table with a missing region -- hole in meta</em>
-<a class="jxr_linenumber" name="367" href="#367">367</a> <em class="jxr_javadoccomment">   * and data missing in the fs.</em>
-<a class="jxr_linenumber" name="368" href="#368">368</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="369" href="#369">369</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="370" href="#370">370</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testRegionHole() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="371" href="#371">371</a>     TableName table =
-<a class="jxr_linenumber" name="372" href="#372">372</a>         TableName.valueOf(<span class="jxr_string">"tableRegionHole"</span>);
-<a class="jxr_linenumber" name="373" href="#373">373</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="374" href="#374">374</a>       setupTable(table);
-<a class="jxr_linenumber" name="375" href="#375">375</a>       assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="376" href="#376">376</a> 
-<a class="jxr_linenumber" name="377" href="#377">377</a>       <em class="jxr_comment">// Mess it up by leaving a hole in the assignment, meta, and hdfs data</em>
-<a class="jxr_linenumber" name="378" href="#378">378</a>       admin.disableTable(table);
-<a class="jxr_linenumber" name="379" href="#379">379</a>       deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"B"</span>), Bytes.toBytes(<span class="jxr_string">"C"</span>), <strong class="jxr_keyword">true</strong>,
-<a class="jxr_linenumber" name="380" href="#380">380</a>           <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="381" href="#381">381</a>       admin.enableTable(table);
+<a class="jxr_linenumber" name="352" href="#352">352</a>       HBaseFsck hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="353" href="#353">353</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN,
+<a class="jxr_linenumber" name="354" href="#354">354</a>           HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN });
+<a class="jxr_linenumber" name="355" href="#355">355</a>       assertEquals(3, hbck.getOverlapGroups(table).size());
+<a class="jxr_linenumber" name="356" href="#356">356</a>       assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="357" href="#357">357</a> 
+<a class="jxr_linenumber" name="358" href="#358">358</a>       <em class="jxr_comment">// fix the problem.</em>
+<a class="jxr_linenumber" name="359" href="#359">359</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="360" href="#360">360</a> 
+<a class="jxr_linenumber" name="361" href="#361">361</a>       <em class="jxr_comment">// verify that overlaps are fixed</em>
+<a class="jxr_linenumber" name="362" href="#362">362</a>       HBaseFsck hbck2 = doFsck(conf, false);
+<a class="jxr_linenumber" name="363" href="#363">363</a>       assertErrors(hbck2, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[0]);
+<a class="jxr_linenumber" name="364" href="#364">364</a>       assertEquals(0, hbck2.getOverlapGroups(table).size());
+<a class="jxr_linenumber" name="365" href="#365">365</a>       assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="366" href="#366">366</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="367" href="#367">367</a>       cleanupTable(table);
+<a class="jxr_linenumber" name="368" href="#368">368</a>     }
+<a class="jxr_linenumber" name="369" href="#369">369</a>   }
+<a class="jxr_linenumber" name="370" href="#370">370</a> 
+<a class="jxr_linenumber" name="371" href="#371">371</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="372" href="#372">372</a> <em class="jxr_javadoccomment">   * This creates and fixes a bad table with a missing region -- hole in meta</em>
+<a class="jxr_linenumber" name="373" href="#373">373</a> <em class="jxr_javadoccomment">   * and data missing in the fs.</em>
+<a class="jxr_linenumber" name="374" href="#374">374</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="375" href="#375">375</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="376" href="#376">376</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testRegionHole() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="377" href="#377">377</a>     TableName table =
+<a class="jxr_linenumber" name="378" href="#378">378</a>         TableName.valueOf(<span class="jxr_string">"tableRegionHole"</span>);
+<a class="jxr_linenumber" name="379" href="#379">379</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="380" href="#380">380</a>       setupTable(table);
+<a class="jxr_linenumber" name="381" href="#381">381</a>       assertEquals(ROWKEYS.length, countRows());
 <a class="jxr_linenumber" name="382" href="#382">382</a> 
-<a class="jxr_linenumber" name="383" href="#383">383</a>       HBaseFsck hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="384" href="#384">384</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });
-<a class="jxr_linenumber" name="385" href="#385">385</a>       <em class="jxr_comment">// holes are separate from overlap groups</em>
-<a class="jxr_linenumber" name="386" href="#386">386</a>       assertEquals(0, hbck.getOverlapGroups(table).size());
-<a class="jxr_linenumber" name="387" href="#387">387</a> 
-<a class="jxr_linenumber" name="388" href="#388">388</a>       <em class="jxr_comment">// fix hole</em>
-<a class="jxr_linenumber" name="389" href="#389">389</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="390" href="#390">390</a> 
-<a class="jxr_linenumber" name="391" href="#391">391</a>       <em class="jxr_comment">// check that hole fixed</em>
-<a class="jxr_linenumber" name="392" href="#392">392</a>       assertNoErrors(doFsck(conf,false));
-<a class="jxr_linenumber" name="393" href="#393">393</a>       assertEquals(ROWKEYS.length - 2, countRows()); <em class="jxr_comment">// lost a region so lost a row</em>
-<a class="jxr_linenumber" name="394" href="#394">394</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="395" href="#395">395</a>       cleanupTable(table);
-<a class="jxr_linenumber" name="396" href="#396">396</a>     }
-<a class="jxr_linenumber" name="397" href="#397">397</a>   }
-<a class="jxr_linenumber" name="398" href="#398">398</a> 
-<a class="jxr_linenumber" name="399" href="#399">399</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="400" href="#400">400</a> <em class="jxr_javadoccomment">   * The region is not deployed when the table is disabled.</em>
-<a class="jxr_linenumber" name="401" href="#401">401</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="402" href="#402">402</a>   @Test (timeout=180000)
-<a class="jxr_linenumber" name="403" href="#403">403</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testRegionShouldNotBeDeployed() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="404" href="#404">404</a>     TableName table =
-<a class="jxr_linenumber" name="405" href="#405">405</a>         TableName.valueOf(<span class="jxr_string">"tableRegionShouldNotBeDeployed"</span>);
-<a class="jxr_linenumber" name="406" href="#406">406</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="407" href="#407">407</a>       LOG.info(<span class="jxr_string">"Starting testRegionShouldNotBeDeployed."</span>);
-<a class="jxr_linenumber" name="408" href="#408">408</a>       <a href="../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html">MiniHBaseCluster</a> cluster = TEST_UTIL.getHBaseCluster();
-<a class="jxr_linenumber" name="409" href="#409">409</a>       assertTrue(cluster.waitForActiveAndReadyMaster());
-<a class="jxr_linenumber" name="410" href="#410">410</a> 
-<a class="jxr_linenumber" name="411" href="#411">411</a> 
-<a class="jxr_linenumber" name="412" href="#412">412</a>       byte[][] SPLIT_KEYS = <strong class="jxr_keyword">new</strong> byte[][] { <strong class="jxr_keyword">new</strong> byte[0], Bytes.toBytes(<span class="jxr_string">"aaa"</span>),
-<a class="jxr_linenumber" name="413" href="#413">413</a>           Bytes.toBytes(<span class="jxr_string">"bbb"</span>), Bytes.toBytes(<span class="jxr_string">"ccc"</span>), Bytes.toBytes(<span class="jxr_string">"ddd"</span>) };
-<a class="jxr_linenumber" name="414" href="#414">414</a>       HTableDescriptor htdDisabled = <strong class="jxr_keyword">new</strong> HTableDescriptor(table);
-<a class="jxr_linenumber" name="415" href="#415">415</a>       htdDisabled.addFamily(<strong class="jxr_keyword">new</strong> HColumnDescriptor(FAM));
+<a class="jxr_linenumber" name="383" href="#383">383</a>       <em class="jxr_comment">// Mess it up by leaving a hole in the assignment, meta, and hdfs data</em>
+<a class="jxr_linenumber" name="384" href="#384">384</a>       admin.disableTable(table);
+<a class="jxr_linenumber" name="385" href="#385">385</a>       deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span class="jxr_string">"B"</span>), Bytes.toBytes(<span class="jxr_string">"C"</span>), <strong class="jxr_keyword">true</strong>,
+<a class="jxr_linenumber" name="386" href="#386">386</a>           <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="387" href="#387">387</a>       admin.enableTable(table);
+<a class="jxr_linenumber" name="388" href="#388">388</a> 
+<a class="jxr_linenumber" name="389" href="#389">389</a>       HBaseFsck hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="390" href="#390">390</a>       assertErrors(hbck, <strong class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });
+<a class="jxr_linenumber" name="391" href="#391">391</a>       <em class="jxr_comment">// holes are separate from overlap groups</em>
+<a class="jxr_linenumber" name="392" href="#392">392</a>       assertEquals(0, hbck.getOverlapGroups(table).size());
+<a class="jxr_linenumber" name="393" href="#393">393</a> 
+<a class="jxr_linenumber" name="394" href="#394">394</a>       <em class="jxr_comment">// fix hole</em>
+<a class="jxr_linenumber" name="395" href="#395">395</a>       doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="396" href="#396">396</a> 
+<a class="jxr_linenumber" name="397" href="#397">397</a>       <em class="jxr_comment">// check that hole fixed</em>
+<a class="jxr_linenumber" name="398" href="#398">398</a>       assertNoErrors(doFsck(conf,false));
+<a class="jxr_linenumber" name="399" href="#399">399</a>       assertEquals(ROWKEYS.length - 2, countRows()); <em class="jxr_comment">// lost a region so lost a row</em>
+<a class="jxr_linenumber" name="400" href="#400">400</a>     } <strong class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="401" href="#401">401</a>       cleanupTable(table);
+<a class="jxr_linenumber" name="402" href="#402">402</a>     }
+<a class="jxr_linenumber" name="403" href="#403">403</a>   }
+<a class="jxr_linenumber" name="404" href="#404">404</a> 
+<a class="jxr_linenumber" name="405" href="#405">405</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="406" href="#406">406</a> <em class="jxr_javadoccomment">   * The region is not deployed when the table is disabled.</em>
+<a class="jxr_linenumber" name="407" href="#407">407</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="408" href="#408">408</a>   @Test (timeout=180000)
+<a class="jxr_linenumber" name="409" href="#409">409</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testRegionShouldNotBeDeployed() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="410" href="#410">410</a>     TableName table =
+<a class="jxr_linenumber" name="411" href="#411">411</a>         TableName.valueOf(<span class="jxr_string">"tableRegionShouldNotBeDeployed"</span>);
+<a class="jxr_linenumber" name="412" href="#412">412</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="413" href="#413">413</a>       LOG.info(<span class="jxr_string">"Starting testRegionShouldNotBeDeployed."</span>);
+<a class="jxr_linenumber" name="414" href="#414">414</a>       <a href="../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html">MiniHBaseCluster</a> cluster = TEST_UTIL.getHBaseCluster();
+<a class="jxr_linenumber" name="415" href="#415">415</a>       assertTrue(cluster.waitForActiveAndReadyMaster());
 <a class="jxr_linenumber" name="416" href="#416">416</a> 
-<a class="jxr_linenumber" name="417" href="#417">417</a>       <em class="jxr_comment">// Write the .tableinfo</em>
-<a class="jxr_linenumber" name="418" href="#418">418</a>       FSTableDescriptors fstd = <strong class="jxr_keyword">new</strong> FSTableDescriptors(conf);
-<a class="jxr_linenumber" name="419" href="#419">419</a>       fstd.createTableDescriptor(htdDisabled);
-<a class="jxr_linenumber" name="420" href="#420">420</a>       List&lt;HRegionInfo&gt; disabledRegions =
-<a class="jxr_linenumber" name="421" href="#421">421</a>           TEST_UTIL.createMultiRegionsInMeta(conf, htdDisabled, SPLIT_KEYS);
+<a class="jxr_linenumber" name="417" href="#417">417</a> 
+<a class="jxr_linenumber" name="418" href="#418">418</a>       byte[][] SPLIT_KEYS = <strong class="jxr_keyword">new</strong> byte[][] { <strong class="jxr_keyword">new</strong> byte[0], Bytes.toBytes(<span class="jxr_string">"aaa"</span>),
+<a class="jxr_linenumber" name="419" href="#419">419</a>           Bytes.toBytes(<span class="jxr_string">"bbb"</span>), Bytes.toBytes(<span class="jxr_string">"ccc"</span>), Bytes.toBytes(<span class="jxr_string">"ddd"</span>) };
+<a class="jxr_linenumber" name="420" href="#420">420</a>       HTableDescriptor htdDisabled = <strong class="jxr_keyword">new</strong> HTableDescriptor(table);
+<a class="jxr_linenumber" name="421" href="#421">421</a>       htdDisabled.addFamily(<strong class="jxr_keyword">new</strong> HColumnDescriptor(FAM));
 <a class="jxr_linenumber" name="422" href="#422">422</a> 
-<a class="jxr_linenumber" name="423" href="#423">423</a>       <em class="jxr_comment">// Let's just assign everything to first RS</em>
-<a class="jxr_linenumber" name="424" href="#424">424</a>       HRegionServer hrs = cluster.getRegionServer(0);
-<a class="jxr_linenumber" name="425" href="#425">425</a> 
-<a class="jxr_linenumber" name="426" href="#426">426</a>       <em class="jxr_comment">// Create region files.</em>
-<a class="jxr_linenumber" name="427" href="#427">427</a>       admin.disableTable(table);
-<a class="jxr_linenumber" name="428" href="#428">428</a>       admin.enableTable(table);
-<a class="jxr_linenumber" name="429" href="#429">429</a> 
-<a class="jxr_linenumber" name="430" href="#430">430</a>       <em class="jxr_comment">// Disable the table and close its regions</em>
-<a class="jxr_linenumber" name="431" href="#431">431</a>       admin.disableTable(table);
-<a class="jxr_linenumber" name="432" href="#432">432</a>       HRegionInfo region = disabledRegions.remove(0);
-<a class="jxr_linenumber" name="433" href="#433">433</a>       byte[] regionName = region.getRegionName();
-<a class="jxr_linenumber" name="434" href="#434">434</a> 
-<a class="jxr_linenumber" name="435" href="#435">435</a>       <em class="jxr_comment">// The region should not be assigned currently</em>
-<a class="jxr_linenumber" name="436" href="#436">436</a>       assertTrue(cluster.getServerWith(regionName) == -1);
-<a class="jxr_linenumber" name="437" href="#437">437</a> 
-<a class="jxr_linenumber" name="438" href="#438">438</a>       <em class="jxr_comment">// Directly open a region on a region server.</em>
-<a class="jxr_linenumber" name="439" href="#439">439</a>       <em class="jxr_comment">// If going through AM/ZK, the region won't be open.</em>
-<a class="jxr_linenumber" name="440" href="#440">440</a>       <em class="jxr_comment">// Even it is opened, AM will close it which causes</em>
-<a class="jxr_linenumber" name="441" href="#441">441</a>       <em class="jxr_com

<TRUNCATED>

[42/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.html
index db127f5..922c952 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.html
@@ -1269,7 +1269,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NIO_BUFFER_LIMIT</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2408">NIO_BUFFER_LIMIT</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2419">NIO_BUFFER_LIMIT</a></pre>
 <div class="block">When the read or write buffer size is larger than this limit, i/o will be
  done in chunks of this size. Most RPC requests and responses would be
  be smaller.</div>
@@ -1289,7 +1289,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2027">RpcServer</a>(<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2038">RpcServer</a>(<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
          <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;services,
          <a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;bindAddress,
@@ -1317,7 +1317,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2087">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2098">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">ConfigurationObserver</a></code></strong></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>
@@ -1333,7 +1333,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>initReconfigurable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2091">initReconfigurable</a>(org.apache.hadoop.conf.Configuration&nbsp;confToLoad)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2102">initReconfigurable</a>(org.apache.hadoop.conf.Configuration&nbsp;confToLoad)</pre>
 </li>
 </ul>
 <a name="getConnection(java.nio.channels.SocketChannel, long)">
@@ -1342,7 +1342,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2109">getConnection</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a>&nbsp;channel,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2120">getConnection</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a>&nbsp;channel,
                                  long&nbsp;time)</pre>
 <div class="block">Subclasses of HBaseServer can override this to provide their own
  Connection implementations.</div>
@@ -1354,7 +1354,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>setupResponse</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2121">setupResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html?is-external=true" title="class or interface in java.io">ByteArrayOutputStream</a>&nbsp;response,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2132">setupResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html?is-external=true" title="class or interface in java.io">ByteArrayOutputStream</a>&nbsp;response,
                  <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a>&nbsp;call,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;error)
@@ -1371,7 +1371,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>closeConnection</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2127">closeConnection</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;connection)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2138">closeConnection</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;connection)</pre>
 </li>
 </ul>
 <a name="getConf()">
@@ -1380,7 +1380,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getConf</h4>
-<pre>org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2136">getConf</a>()</pre>
+<pre>org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2147">getConf</a>()</pre>
 </li>
 </ul>
 <a name="setSocketSendBufSize(int)">
@@ -1389,7 +1389,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>setSocketSendBufSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2144">setSocketSendBufSize</a>(int&nbsp;size)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2155">setSocketSendBufSize</a>(int&nbsp;size)</pre>
 <div class="block">Sets the socket buffer size used for responding to RPCs.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1403,7 +1403,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>isStarted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2147">isStarted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2158">isStarted</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html#isStarted()">isStarted</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a></code></dd>
@@ -1416,7 +1416,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2153">start</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2164">start</a>()</pre>
 <div class="block">Starts the service.  Must be called before any calls will be handled.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1430,7 +1430,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshAuthManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2169">refreshAuthManager</a>(org.apache.hadoop.security.authorize.PolicyProvider&nbsp;pp)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2180">refreshAuthManager</a>(org.apache.hadoop.security.authorize.PolicyProvider&nbsp;pp)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html#refreshAuthManager(org.apache.hadoop.security.authorize.PolicyProvider)">RpcServerInterface</a></code></strong></div>
 <div class="block">Refresh authentication manager policy.</div>
 <dl>
@@ -1445,7 +1445,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>createSecretManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenSecretManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2175">createSecretManager</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.html" title="class in org.apache.hadoop.hbase.security.token">AuthenticationTokenSecretManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2186">createSecretManager</a>()</pre>
 </li>
 </ul>
 <a name="getSecretManager()">
@@ -1454,7 +1454,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getSecretManager</h4>
-<pre>public&nbsp;org.apache.hadoop.security.token.SecretManager&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2187">getSecretManager</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.security.token.SecretManager&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2198">getSecretManager</a>()</pre>
 </li>
 </ul>
 <a name="setSecretManager(org.apache.hadoop.security.token.SecretManager)">
@@ -1463,7 +1463,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>setSecretManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2192">setSecretManager</a>(org.apache.hadoop.security.token.SecretManager&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;secretManager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2203">setSecretManager</a>(org.apache.hadoop.security.token.SecretManager&lt;? extends org.apache.hadoop.security.token.TokenIdentifier&gt;&nbsp;secretManager)</pre>
 </li>
 </ul>
 <a name="call(com.google.protobuf.BlockingService, com.google.protobuf.Descriptors.MethodDescriptor, com.google.protobuf.Message, org.apache.hadoop.hbase.CellScanner, long, org.apache.hadoop.hbase.monitoring.MonitoredRPCHandler)">
@@ -1472,7 +1472,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;com.google.protobuf.Message,<a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2202">call</a>(com.google.protobuf.BlockingService&nbsp;service,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;com.google.protobuf.Message,<a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2213">call</a>(com.google.protobuf.BlockingService&nbsp;service,
                                                  com.google.protobuf.Descriptors.MethodDescriptor&nbsp;md,
                                                  com.google.protobuf.Message&nbsp;param,
                                                  <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
@@ -1495,7 +1495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>logResponse</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2276">logResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;params,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2287">logResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;params,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;methodName,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;call,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tag,
@@ -1519,7 +1519,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2319">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2330">stop</a>()</pre>
 <div class="block">Stops the service.  No new calls will be handled after this is called.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1533,7 +1533,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2339">join</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2350">join</a>()
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Wait for the server to be stopped.
  Does not wait for all subthreads to finish.
@@ -1551,7 +1551,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getListenerAddress</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ipc/RpcServer.html#line.2352">getListenerAddress</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ipc/RpcServer.html#line.2363">getListenerAddress</a>()</pre>
 <div class="block">Return the socket (ip+port) on which the RPC server is listening to. May return null if
  the listener channel is closed.</div>
 <dl>
@@ -1567,7 +1567,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>setErrorHandler</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2364">setErrorHandler</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRPCErrorHandler</a>&nbsp;handler)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2375">setErrorHandler</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRPCErrorHandler</a>&nbsp;handler)</pre>
 <div class="block">Set the handler for calling out of RPC for error conditions.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1581,7 +1581,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getErrorHandler</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRPCErrorHandler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2369">getErrorHandler</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRPCErrorHandler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2380">getErrorHandler</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html#getErrorHandler()">getErrorHandler</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a></code></dd>
@@ -1594,7 +1594,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2377">getMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServer.html" title="class in org.apache.hadoop.hbase.ipc">MetricsHBaseServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2388">getMetrics</a>()</pre>
 <div class="block">Returns the metrics instance for reporting RPC call statistics</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1608,7 +1608,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>addCallSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2382">addCallSize</a>(long&nbsp;diff)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2393">addCallSize</a>(long&nbsp;diff)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html#addCallSize(long)">RpcServerInterface</a></code></strong></div>
 <div class="block">Add/subtract from the current size of all outstanding calls.  Called on setup of a call to add
  call total size and then again at end of a call to remove the call size.</div>
@@ -1624,7 +1624,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>authorize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2395">authorize</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;user,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2406">authorize</a>(org.apache.hadoop.security.UserGroupInformation&nbsp;user,
              org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader&nbsp;connection,
              <a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;addr)
                throws org.apache.hadoop.security.authorize.AuthorizationException</pre>
@@ -1640,7 +1640,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>channelWrite</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2424">channelWrite</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/GatheringByteChannel.html?is-external=true" title="class or interface in java.nio.channels">GatheringByteChannel</a>&nbsp;channel,
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2435">channelWrite</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/GatheringByteChannel.html?is-external=true" title="class or interface in java.nio.channels">GatheringByteChannel</a>&nbsp;channel,
                 <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html" title="class in org.apache.hadoop.hbase.ipc">BufferChain</a>&nbsp;bufferChain)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This is a wrapper around <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/WritableByteChannel.html?is-external=true#write(java.nio.ByteBuffer)" title="class or interface in java.nio.channels"><code>WritableByteChannel.write(java.nio.ByteBuffer)</code></a>.
@@ -1661,7 +1661,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>channelRead</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2443">channelRead</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/ReadableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">ReadableByteChannel</a>&nbsp;channel,
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2454">channelRead</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/ReadableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">ReadableByteChannel</a>&nbsp;channel,
               <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buffer)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This is a wrapper around <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/ReadableByteChannel.html?is-external=true#read(java.nio.ByteBuffer)" title="class or interface in java.nio.channels"><code>ReadableByteChannel.read(java.nio.ByteBuffer)</code></a>.
@@ -1680,7 +1680,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>channelIO</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2467">channelIO</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/ReadableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">ReadableByteChannel</a>&nbsp;readCh,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2478">channelIO</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/ReadableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">ReadableByteChannel</a>&nbsp;readCh,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/WritableByteChannel.html?is-external=true" title="class or interface in java.nio.channels">WritableByteChannel</a>&nbsp;writeCh,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;buf)
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1700,7 +1700,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentCall</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2501">getCurrentCall</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2512">getCurrentCall</a>()</pre>
 <div class="block">Needed for features such as delayed calls.  We need to be able to store the current call
  so that we can complete it later or ask questions of what is supported by the current ongoing
  call.</div>
@@ -1713,7 +1713,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>isInRpcCallContext</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2505">isInRpcCallContext</a>()</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2516">isInRpcCallContext</a>()</pre>
 </li>
 </ul>
 <a name="getRequestUser()">
@@ -1722,7 +1722,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestUser</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2514">getRequestUser</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2525">getRequestUser</a>()</pre>
 <div class="block">Returns the user credentials associated with the current RPC request or
  <code>null</code> if no credentials were provided.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>A User</dd></dl>
@@ -1734,7 +1734,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestUserName</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2523">getRequestUserName</a>()</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2534">getRequestUserName</a>()</pre>
 <div class="block">Returns the username for any user associated with the current RPC
  request or <code>null</code> if no user is set.</div>
 </li>
@@ -1745,7 +1745,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteAddress</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2531">getRemoteAddress</a>()</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2542">getRemoteAddress</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Address of remote client if a request is ongoing, else null</dd></dl>
 </li>
 </ul>
@@ -1755,7 +1755,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getServiceAndInterface</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2541">getServiceAndInterface</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;services,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2552">getServiceAndInterface</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;services,
                                                            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serviceName)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>serviceName</code> - Some arbitrary string that represents a 'service'.</dd><dd><code>services</code> - Available service instances</dd>
 <dt><span class="strong">Returns:</span></dt><dd>Matching BlockingServiceAndInterface pair</dd></dl>
@@ -1767,7 +1767,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getServiceInterface</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2556">getServiceInterface</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;services,
+<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2567">getServiceInterface</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;services,
                            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serviceName)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>serviceName</code> - Some arbitrary string that represents a 'service'.</dd><dd><code>services</code> - Available services and their service interfaces.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>Service interface class for <code>serviceName</code></dd></dl>
@@ -1779,7 +1779,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getService</h4>
-<pre>static&nbsp;com.google.protobuf.BlockingService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2569">getService</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;services,
+<pre>static&nbsp;com.google.protobuf.BlockingService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2580">getService</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;&nbsp;services,
                                              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serviceName)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>serviceName</code> - Some arbitrary string that represents a 'service'.</dd><dd><code>services</code> - Available services and their service interfaces.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>BlockingService that goes with the passed <code>serviceName</code></dd></dl>
@@ -1791,7 +1791,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getStatus</h4>
-<pre>static&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/ipc/RpcServer.html#line.2577">getStatus</a>()</pre>
+<pre>static&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/ipc/RpcServer.html#line.2588">getStatus</a>()</pre>
 </li>
 </ul>
 <a name="getRemoteIp()">
@@ -1800,7 +1800,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteIp</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2593">getRemoteIp</a>()</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2604">getRemoteIp</a>()</pre>
 <div class="block">Returns the remote side ip address when invoked inside an RPC
   Returns null incase of an error.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>InetAddress</dd></dl>
@@ -1812,7 +1812,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockList">
 <li class="blockList">
 <h4>bind</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2612">bind</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html?is-external=true" title="class or interface in java.net">ServerSocket</a>&nbsp;socket,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2623">bind</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html?is-external=true" title="class or interface in java.net">ServerSocket</a>&nbsp;socket,
         <a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>&nbsp;address,
         int&nbsp;backlog)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1831,7 +1831,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterfac
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getScheduler</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.html" title="class in org.apache.hadoop.hbase.ipc">RpcScheduler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2634">getScheduler</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcScheduler.html" title="class in org.apache.hadoop.hbase.ipc">RpcScheduler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2645">getScheduler</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html#getScheduler()">getScheduler</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/class-use/RpcCallContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/class-use/RpcCallContext.html b/devapidocs/org/apache/hadoop/hbase/ipc/class-use/RpcCallContext.html
index 10a3095..bab023a 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/class-use/RpcCallContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/class-use/RpcCallContext.html
@@ -137,6 +137,14 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
+<td class="colLast"><span class="strong">RSRpcServices.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#addSize(org.apache.hadoop.hbase.ipc.RpcCallContext,%20org.apache.hadoop.hbase.client.Result,%20java.lang.Object)">addSize</a></strong>(<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/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;lastBlock)</code>
+<div class="block">Method to account for the size of retained cells and retained data blocks.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>&gt;</code></td>
 <td class="colLast"><span class="strong">RSRpcServices.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doNonAtomicRegionMutation(org.apache.hadoop.hbase.regionserver.Region,%20org.apache.hadoop.hbase.quotas.OperationQuota,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction,%20org.apache.hadoop.hbase.CellScanner,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult.Builder,%20java.util.List,%20long,%20org.apache.hadoop.hbase.regionserver.RSRpcServices.RegionScannersCloseCallBack,%20org.apache.hadoop.hbase.ipc.RpcCallContext)">doNonAtomicRegionMutation</a></strong>(<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,
@@ -151,14 +159,14 @@
  done, add an instance of a <code>ClientProtos.ResultOrException</code> that corresponds to each Mutation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="strong">RSRpcServices.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#get(org.apache.hadoop.hbase.client.Get,%20org.apache.hadoop.hbase.regionserver.HRegion,%20org.apache.hadoop.hbase.regionserver.RSRpcServices.RegionScannersCloseCallBack,%20org.apache.hadoop.hbase.ipc.RpcCallContext)">get</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
       <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
       <a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannersCloseCallBack</a>&nbsp;closeCallBack,
       <a href="../../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><span class="strong">RSRpcServices.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#isClientCellBlockSupport(org.apache.hadoop.hbase.ipc.RpcCallContext)">isClientCellBlockSupport</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
index 6a123c3..a8334a3 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
@@ -353,7 +353,7 @@ implements org.apache.hadoop.util.Tool</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfofDir,
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfilesDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue,
                                   boolean&nbsp;validateHFile)</code>
@@ -744,7 +744,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareHFileQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.430">prepareHFileQueue</a>(org.apache.hadoop.fs.Path&nbsp;hfofDir,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.431">prepareHFileQueue</a>(org.apache.hadoop.fs.Path&nbsp;hfilesDir,
                      <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue,
                      boolean&nbsp;validateHFile)
@@ -752,7 +752,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <div class="block">Prepare a collection of <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>LoadIncrementalHFiles.LoadQueueItem</code></a> from list of source hfiles contained in the
  passed directory and validates whether the prepared queue has all the valid table column
  families in it.</div>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>hfilesDir</code> - directory containing list of hfiles to be loaded into the table</dd><dd><code>table</code> - table to which hfiles should be loaded</dd><dd><code>queue</code> - queue which needs to be loaded into the table</dd>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>hfilesDir</code> - directory containing list of hfiles to be loaded into the table</dd><dd><code>table</code> - table to which hfiles should be loaded</dd><dd><code>queue</code> - queue which needs to be loaded into the table</dd><dd><code>validateHFile</code> - if true hfiles will be validated for its format</dd>
 <dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - If any I/O or network error occurred</dd></dl>
 </li>
@@ -763,7 +763,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>createExecutorService</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.437">createExecutorService</a>()</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.438">createExecutorService</a>()</pre>
 </li>
 </ul>
 <a name="validateFamiliesInHFiles(org.apache.hadoop.hbase.client.Table, java.util.Deque)">
@@ -772,7 +772,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>validateFamiliesInHFiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.449">validateFamiliesInHFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.450">validateFamiliesInHFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue)
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Checks whether there is any invalid family name in HFiles to be bulk loaded.</div>
@@ -786,7 +786,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>loadHFileQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.485">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.486">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                   <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue,
                   <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;startEndKeys)
@@ -805,7 +805,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadPhase</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.505">bulkLoadPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.506">bulkLoadPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                  <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue,
@@ -824,7 +824,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>checkHFilesCountPerRegionPerFamily</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.549">checkHFilesCountPerRegionPerFamily</a>(com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;regionGroups)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.550">checkHFilesCountPerRegionPerFamily</a>(com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;regionGroups)</pre>
 </li>
 </ul>
 <a name="groupOrSplitPhase(org.apache.hadoop.hbase.client.Table, java.util.concurrent.ExecutorService, java.util.Deque, org.apache.hadoop.hbase.util.Pair)">
@@ -833,7 +833,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>groupOrSplitPhase</h4>
-<pre>private&nbsp;com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.577">groupOrSplitPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>private&nbsp;com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.578">groupOrSplitPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                                                                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
                                                                                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue,
                                                                                                    <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;startEndKeys)
@@ -849,7 +849,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getUniqueName</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.624">getUniqueName</a>()</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.625">getUniqueName</a>()</pre>
 </li>
 </ul>
 <a name="splitStoreFile(org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem, org.apache.hadoop.hbase.client.Table, byte[], byte[])">
@@ -858,7 +858,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>splitStoreFile</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.628">splitStoreFile</a>(<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&nbsp;item,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.629">splitStoreFile</a>(<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&nbsp;item,
                                                        <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                                        byte[]&nbsp;startKey,
                                                        byte[]&nbsp;splitKey)
@@ -873,7 +873,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>groupOrSplit</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.675">groupOrSplit</a>(com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;regionGroups,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.676">groupOrSplit</a>(com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;regionGroups,
                                                      <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&nbsp;item,
                                                      <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                                      <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;startEndKeys)
@@ -894,7 +894,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>tryAtomicRegionLoad</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.769">tryAtomicRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.770">tryAtomicRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                                                             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                             byte[]&nbsp;first,
                                                             <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;lqis)
@@ -919,7 +919,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isSecureBulkLoadEndpointAvailable</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.859">isSecureBulkLoadEndpointAvailable</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.860">isSecureBulkLoadEndpointAvailable</a>()</pre>
 </li>
 </ul>
 <a name="splitStoreFile(org.apache.hadoop.conf.Configuration, org.apache.hadoop.fs.Path, org.apache.hadoop.hbase.HColumnDescriptor, byte[], org.apache.hadoop.fs.Path, org.apache.hadoop.fs.Path)">
@@ -928,7 +928,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>splitStoreFile</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.868">splitStoreFile</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.869">splitStoreFile</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                   org.apache.hadoop.fs.Path&nbsp;inFile,
                   <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;familyDesc,
                   byte[]&nbsp;splitKey,
@@ -947,7 +947,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>copyHFileHalf</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.884">copyHFileHalf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.885">copyHFileHalf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                  org.apache.hadoop.fs.Path&nbsp;inFile,
                  org.apache.hadoop.fs.Path&nbsp;outFile,
                  <a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a>&nbsp;reference,
@@ -964,7 +964,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCopyHFileMetaKey</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.929">shouldCopyHFileMetaKey</a>(byte[]&nbsp;key)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.930">shouldCopyHFileMetaKey</a>(byte[]&nbsp;key)</pre>
 </li>
 </ul>
 <a name="inferBoundaries(java.util.TreeMap)">
@@ -973,7 +973,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>inferBoundaries</h4>
-<pre>public static&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.946">inferBoundaries</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;bdryMap)</pre>
+<pre>public static&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.947">inferBoundaries</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;bdryMap)</pre>
 </li>
 </ul>
 <a name="createTable(org.apache.hadoop.hbase.TableName, java.lang.String, org.apache.hadoop.hbase.client.Admin)">
@@ -982,7 +982,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.968">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.969">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;dirPath,
                <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -996,7 +996,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1022">run</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1023">run</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -1011,7 +1011,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1056">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1057">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -1023,7 +1023,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setBulkToken</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1071">setBulkToken</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stagingDir)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1072">setBulkToken</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stagingDir)</pre>
 <div class="block">Called from replication sink, where it manages bulkToken(staging directory) by itself. This is
  used only when <a href="../../../../../org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access"><code>SecureBulkLoadEndpoint</code></a> is configured in hbase.coprocessor.region.classes
  property. This directory is used as a temporary directory where all files are initially

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/mapreduce/class-use/LoadIncrementalHFiles.LoadQueueItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/class-use/LoadIncrementalHFiles.LoadQueueItem.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/class-use/LoadIncrementalHFiles.LoadQueueItem.html
index 83416f8..6ba1af9 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/class-use/LoadIncrementalHFiles.LoadQueueItem.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/class-use/LoadIncrementalHFiles.LoadQueueItem.html
@@ -229,7 +229,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">LoadIncrementalHFiles.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfofDir,
+<td class="colLast"><span class="strong">LoadIncrementalHFiles.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfilesDir,
                                   <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue,
                                   boolean&nbsp;validateHFile)</code>

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

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

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

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


[15/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
index 69da9c5..7d573ec 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
@@ -28,86 +28,161 @@
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.CompatibilityFactory;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HConstants;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.TableName;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.Waiter;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.metrics.BaseSource;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.test.MetricsAssertHelper;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.junit.AfterClass;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.junit.BeforeClass;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.junit.Test;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.experimental.categories.Category;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.ArrayList;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.List;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import static junit.framework.TestCase.assertEquals;<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> * This test sets the multi size WAAAAAY low and then checks to make sure that gets will still make<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * progress.<a name="line.44"></a>
-<span class="sourceLineNo">045</span> */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>@Category({MediumTests.class, ClientTests.class})<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class TestMultiRespectsLimits {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private static final MetricsAssertHelper METRICS_ASSERT =<a name="line.49"></a>
-<span class="sourceLineNo">050</span>      CompatibilityFactory.getInstance(MetricsAssertHelper.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private final static byte[] FAMILY = Bytes.toBytes("D");<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public static final int MAX_SIZE = 500;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  @BeforeClass<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  public static void setUpBeforeClass() throws Exception {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    TEST_UTIL.getConfiguration().setLong(<a name="line.56"></a>
-<span class="sourceLineNo">057</span>        HConstants.HBASE_SERVER_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.57"></a>
-<span class="sourceLineNo">058</span>        MAX_SIZE);<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>    // Only start on regionserver so that all regions are on the same server.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    TEST_UTIL.startMiniCluster(1);<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>  @AfterClass<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public static void tearDownAfterClass() throws Exception {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.66"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HConstants;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.TableName;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.Waiter;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.metrics.BaseSource;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.test.MetricsAssertHelper;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<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.junit.AfterClass;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.BeforeClass;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Test;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.experimental.categories.Category;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.ArrayList;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.List;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.ThreadLocalRandom;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>import static junit.framework.TestCase.assertEquals;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * This test sets the multi size WAAAAAY low and then checks to make sure that gets will still make<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * progress.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> */<a name="line.50"></a>
+<span class="sourceLineNo">051</span>@Category({MediumTests.class, ClientTests.class})<a name="line.51"></a>
+<span class="sourceLineNo">052</span>public class TestMultiRespectsLimits {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final MetricsAssertHelper METRICS_ASSERT =<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      CompatibilityFactory.getInstance(MetricsAssertHelper.class);<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private final static byte[] FAMILY = Bytes.toBytes("D");<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static final int MAX_SIZE = 500;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @BeforeClass<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static void setUpBeforeClass() throws Exception {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    TEST_UTIL.getConfiguration().setLong(<a name="line.61"></a>
+<span class="sourceLineNo">062</span>        HConstants.HBASE_SERVER_SCANNER_MAX_RESULT_SIZE_KEY,<a name="line.62"></a>
+<span class="sourceLineNo">063</span>        MAX_SIZE);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    // Only start on regionserver so that all regions are on the same server.<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    TEST_UTIL.startMiniCluster(1);<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>  @Test<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public void testMultiLimits() throws Exception {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    final TableName name = TableName.valueOf("testMultiLimits");<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    Table t = TEST_UTIL.createTable(name, FAMILY);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    TEST_UTIL.loadTable(t, FAMILY, false);<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>    // Split the table to make sure that the chunking happens accross regions.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    try (final Admin admin = TEST_UTIL.getHBaseAdmin()) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      admin.split(name);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      TEST_UTIL.waitFor(60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>        @Override<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        public boolean evaluate() throws Exception {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>          return admin.getTableRegions(name).size() &gt; 1;<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>    }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    List&lt;Get&gt; gets = new ArrayList&lt;&gt;(MAX_SIZE);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    for (int i = 0; i &lt; MAX_SIZE; i++) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      gets.add(new Get(HBaseTestingUtility.ROWS[i]));<a name="line.88"></a>
+<span class="sourceLineNo">069</span>  @AfterClass<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static void tearDownAfterClass() throws Exception {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    TEST_UTIL.shutdownMiniCluster();<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>  @Test<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public void testMultiLimits() throws Exception {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    final TableName name = TableName.valueOf("testMultiLimits");<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    Table t = TEST_UTIL.createTable(name, FAMILY);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    TEST_UTIL.loadTable(t, FAMILY, false);<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>    // Split the table to make sure that the chunking happens accross regions.<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    try (final Admin admin = TEST_UTIL.getAdmin()) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      admin.split(name);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      TEST_UTIL.waitFor(60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        @Override<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        public boolean evaluate() throws Exception {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          return admin.getTableRegions(name).size() &gt; 1;<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>    Result[] results = t.get(gets);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    assertEquals(MAX_SIZE, results.length);<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    RpcServerInterface rpcServer = TEST_UTIL.getHBaseCluster().getRegionServer(0).getRpcServer();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    BaseSource s = rpcServer.getMetrics().getMetricsSource();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    // Cells from TEST_UTIL.loadTable have a length of 27.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    // Multiplying by less than that gives an easy lower bound on size.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    // However in reality each kv is being reported as much higher than that.<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    METRICS_ASSERT.assertCounterGt("exceptions", (MAX_SIZE * 25) / MAX_SIZE, s);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    METRICS_ASSERT.assertCounterGt("exceptions.multiResponseTooLarge",<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        (MAX_SIZE * 25) / MAX_SIZE, s);<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">090</span>    List&lt;Get&gt; gets = new ArrayList&lt;&gt;(MAX_SIZE);<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    for (int i = 0; i &lt; MAX_SIZE; i++) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      gets.add(new Get(HBaseTestingUtility.ROWS[i]));<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>    RpcServerInterface rpcServer = TEST_UTIL.getHBaseCluster().getRegionServer(0).getRpcServer();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    BaseSource s = rpcServer.getMetrics().getMetricsSource();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    long startingExceptions = METRICS_ASSERT.getCounter("exceptions", s);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    long startingMultiExceptions = METRICS_ASSERT.getCounter("exceptions.multiResponseTooLarge", s);<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>    Result[] results = t.get(gets);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    assertEquals(MAX_SIZE, results.length);<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    // Cells from TEST_UTIL.loadTable have a length of 27.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    // Multiplying by less than that gives an easy lower bound on size.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // However in reality each kv is being reported as much higher than that.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    METRICS_ASSERT.assertCounterGt("exceptions",<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        startingExceptions + ((MAX_SIZE * 25) / MAX_SIZE), s);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    METRICS_ASSERT.assertCounterGt("exceptions.multiResponseTooLarge",<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        startingMultiExceptions + ((MAX_SIZE * 25) / MAX_SIZE), s);<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>  @Test<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public void testBlockMultiLimits() throws Exception {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    final TableName name = TableName.valueOf("testBlockMultiLimits");<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    HTableDescriptor desc = new HTableDescriptor(name);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    HColumnDescriptor hcd = new HColumnDescriptor(FAMILY);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    hcd.setDataBlockEncoding(DataBlockEncoding.FAST_DIFF);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    desc.addFamily(hcd);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    TEST_UTIL.getHBaseAdmin().createTable(desc);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    Table t = TEST_UTIL.getConnection().getTable(name);<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>    final HRegionServer regionServer = TEST_UTIL.getHBaseCluster().getRegionServer(0);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    RpcServerInterface rpcServer = regionServer.getRpcServer();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    BaseSource s = rpcServer.getMetrics().getMetricsSource();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    long startingExceptions = METRICS_ASSERT.getCounter("exceptions", s);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    long startingMultiExceptions = METRICS_ASSERT.getCounter("exceptions.multiResponseTooLarge", s);<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>    byte[] row = Bytes.toBytes("TEST");<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    byte[][] cols = new byte[][]{<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        Bytes.toBytes("0"), // Get this<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        Bytes.toBytes("1"), // Buffer<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        Bytes.toBytes("2"), // Buffer<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        Bytes.toBytes("3"), // Get This<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        Bytes.toBytes("4"), // Buffer<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        Bytes.toBytes("5"), // Buffer<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    };<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // Set the value size so that one result will be less than the MAX_SIE<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // however the block being reference will be larger than MAX_SIZE.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    // This should cause the regionserver to try and send a result immediately.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    byte[] value = new byte[MAX_SIZE - 100];<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    ThreadLocalRandom.current().nextBytes(value);<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>    for (byte[] col:cols) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      Put p = new Put(row);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      p.addImmutable(FAMILY, col, value);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      t.put(p);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>    // Make sure that a flush happens<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try (final Admin admin = TEST_UTIL.getAdmin()) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      admin.flush(name);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      TEST_UTIL.waitFor(60000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        public boolean evaluate() throws Exception {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>          return regionServer.getOnlineRegions(name).get(0).getMaxFlushedSeqId() &gt; 3;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      });<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>    List&lt;Get&gt; gets = new ArrayList&lt;&gt;(2);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    Get g0 = new Get(row);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    g0.addColumn(FAMILY, cols[0]);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    gets.add(g0);<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>    Get g2 = new Get(row);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    g2.addColumn(FAMILY, cols[3]);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    gets.add(g2);<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Result[] results = t.get(gets);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    assertEquals(2, results.length);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    METRICS_ASSERT.assertCounterGt("exceptions", startingExceptions, s);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    METRICS_ASSERT.assertCounterGt("exceptions.multiResponseTooLarge",<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        startingMultiExceptions, s);<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>
 
 
 


[35/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     * connections w

<TRUNCATED>

[30/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     * connections will be looked at for the cleanup.<a name="line.735"></a>
+<span class="sourceLineNo">736</span>     * @param force all connec

<TRUNCATED>

[40/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 e79b86b..a81fa38 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -104,7 +104,7 @@
 <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.196">RSRpcServices</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.199">RSRpcServices</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHandler.html" title="interface in org.apache.hadoop.hbase.ipc">HBaseRPCErrorHandler</a>, org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService.BlockingInterface, org.apache.hadoop.hbase.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>
@@ -297,6 +297,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#addSize(org.apache.hadoop.hbase.ipc.RpcCallContext,%20org.apache.hadoop.hbase.client.Result,%20java.lang.Object)">addSize</a></strong>(<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/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;lastBlock)</code>
+<div class="block">Method to account for the size of retained cells and retained data blocks.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#append(org.apache.hadoop.hbase.regionserver.Region,%20org.apache.hadoop.hbase.quotas.OperationQuota,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto,%20org.apache.hadoop.hbase.CellScanner,%20long)">append</a></strong>(<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,
@@ -306,14 +314,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Execute an append mutation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#bulkLoadHFile(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest)">bulkLoadHFile</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest&nbsp;request)</code>
 <div class="block">Atomically bulk load several HFiles into an open region</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#checkAndRowMutate(org.apache.hadoop.hbase.regionserver.Region,%20java.util.List,%20org.apache.hadoop.hbase.CellScanner,%20byte[],%20byte[],%20byte[],%20org.apache.hadoop.hbase.filter.CompareFilter.CompareOp,%20org.apache.hadoop.hbase.filter.ByteArrayComparable)">checkAndRowMutate</a></strong>(<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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
@@ -326,41 +334,41 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Mutate a list of rows atomically.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#checkOOME(java.lang.Throwable)">checkOOME</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</code>
 <div class="block">Take actions on the event of an OutOfMemoryError.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#checkOpen()">checkOpen</a></strong>()</code>
 <div class="block">Called to verify that this server is up and running.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#closeAllScanners()">closeAllScanners</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#closeRegion(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest)">closeRegion</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                       org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)</code>
 <div class="block">Close a region on the region server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#compactRegion(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest)">compactRegion</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest&nbsp;request)</code>
 <div class="block">Compact a region on the region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#createPriority()">createPriority</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doBatchOp(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult.Builder,%20org.apache.hadoop.hbase.regionserver.Region,%20org.apache.hadoop.hbase.quotas.OperationQuota,%20java.util.List,%20org.apache.hadoop.hbase.CellScanner)">doBatchOp</a></strong>(org.apache.hadoop.hbase.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,
@@ -370,7 +378,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Execute a list of Put/Delete mutations.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doNonAtomicRegionMutation(org.apache.hadoop.hbase.regionserver.Region,%20org.apache.hadoop.hbase.quotas.OperationQuota,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction,%20org.apache.hadoop.hbase.CellScanner,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult.Builder,%20java.util.List,%20long,%20org.apache.hadoop.hbase.regionserver.RSRpcServices.RegionScannersCloseCallBack,%20org.apache.hadoop.hbase.ipc.RpcCallContext)">doNonAtomicRegionMutation</a></strong>(<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,
@@ -385,7 +393,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
  done, add an instance of a <code>ClientProtos.ResultOrException</code> that corresponds to each Mutation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#doReplayBatchOp(org.apache.hadoop.hbase.regionserver.Region,%20java.util.List,%20long)">doReplayBatchOp</a></strong>(<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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>&gt;&nbsp;mutations,
@@ -393,7 +401,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Execute a list of Put/Delete mutations.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#endNonceOperation(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto,%20long,%20boolean)">endNonceOperation</a></strong>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                                   long&nbsp;nonceGroup,
@@ -401,68 +409,68 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Ends nonce operation for a mutation, if needed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#execRegionServerService(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest)">execRegionServerService</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                                               org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#execService(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest)">execService</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                       org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private com.google.protobuf.Message</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#execServiceOnRegion(org.apache.hadoop.hbase.regionserver.Region,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall)">execServiceOnRegion</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
                                       org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;serviceCall)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#flushRegion(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest)">flushRegion</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                       org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest&nbsp;request)</code>
 <div class="block">Flush a region on the region server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#get(org.apache.hadoop.hbase.client.Get,%20org.apache.hadoop.hbase.regionserver.HRegion,%20org.apache.hadoop.hbase.regionserver.RSRpcServices.RegionScannersCloseCallBack,%20org.apache.hadoop.hbase.ipc.RpcCallContext)">get</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
       <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
       <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices.RegionScannersCloseCallBack</a>&nbsp;closeCallBack,
       <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#get(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest)">get</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
       org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest&nbsp;request)</code>
 <div class="block">Get data from a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getConfiguration()">getConfiguration</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getDeadline(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader,%20com.google.protobuf.Message)">getDeadline</a></strong>(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
                       com.google.protobuf.Message&nbsp;param)</code>
 <div class="block">Returns the deadline of the specified request.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getHostname(org.apache.hadoop.conf.Configuration,%20boolean)">getHostname</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                       boolean&nbsp;isMaster)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getOnlineRegion(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest)">getOnlineRegion</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                               org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html" title="interface in org.apache.hadoop.hbase.ipc">PriorityFunction</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getPriority()">getPriority</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getPriority(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader,%20com.google.protobuf.Message,%20org.apache.hadoop.hbase.security.User)">getPriority</a></strong>(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
                       com.google.protobuf.Message&nbsp;param,
@@ -470,72 +478,72 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Returns the 'priority type' of the specified request.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerQuotaManager</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getQuotaManager()">getQuotaManager</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRegion(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier)">getRegion</a></strong>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)</code>
 <div class="block">Find the HRegion based on a region specifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getRegionInfo(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest)">getRegionInfo</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getResultOrException(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Result,%20int,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats)">getResultOrException</a></strong>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Result&nbsp;r,
                                         int&nbsp;index,
                                         org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;stats)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getResultOrException(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException.Builder,%20int)">getResultOrException</a></strong>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
                                         int&nbsp;index)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getResultOrException(java.lang.Exception,%20int)">getResultOrException</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
                                         int&nbsp;index)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getScanner(long)">getScanner</a></strong>(long&nbsp;scannerId)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getScannerVirtualTime(long)">getScannerVirtualTime</a></strong>(long&nbsp;scannerId)</code>
 <div class="block">Get the vtime associated with the scanner.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getServerInfo(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest)">getServerInfo</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest&nbsp;request)</code>
 <div class="block">Get some information of the region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.BlockingServiceAndInterface</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getServices()">getServices</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getSocketAddress()">getSocketAddress</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getStoreFile(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest)">getStoreFile</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                         org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#getWAL(org.apache.hadoop.hbase.regionserver.Region)">getWAL</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#increment(org.apache.hadoop.hbase.regionserver.Region,%20org.apache.hadoop.hbase.quotas.OperationQuota,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto,%20org.apache.hadoop.hbase.CellScanner,%20long)">increment</a></strong>(<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,
@@ -545,36 +553,36 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Execute an increment mutation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#isClientCellBlockSupport()">isClientCellBlockSupport</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#isClientCellBlockSupport(org.apache.hadoop.hbase.ipc.RpcCallContext)">isClientCellBlockSupport</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a>&nbsp;context)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#mergeRegions(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest)">mergeRegions</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                         org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest&nbsp;request)</code>
 <div class="block">Merge regions on the region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#multi(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest)">multi</a></strong>(com.google.protobuf.RpcController&nbsp;rpcc,
           org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest&nbsp;request)</code>
 <div class="block">Execute multiple actions on a table: get, mutate, and/or execCoprocessor</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#mutate(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest)">mutate</a></strong>(com.google.protobuf.RpcController&nbsp;rpcc,
             org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest&nbsp;request)</code>
 <div class="block">Mutate data in a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#mutateRows(org.apache.hadoop.hbase.regionserver.Region,%20java.util.List,%20org.apache.hadoop.hbase.CellScanner)">mutateRows</a></strong>(<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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Action&gt;&nbsp;actions,
@@ -582,88 +590,88 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <div class="block">Mutate a list of rows atomically.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">onConfigurationChange</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</code>
 <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>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#openRegion(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest)">openRegion</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                     org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)</code>
 <div class="block">Open asynchronously a region or a set of regions on the region server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#replay(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest)">replay</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
             org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)</code>
 <div class="block">Replay the given changes when distributedLogReplay WAL edits from a failed RS.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#replicateWALEntry(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest)">replicateWALEntry</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                                   org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)</code>
 <div class="block">Replicate WAL entries on the region server.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#rollWALWriter(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest)">rollWALWriter</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                           org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest&nbsp;request)</code>
 <div class="block">Roll the WAL writer of the region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#scan(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest)">scan</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
         org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest&nbsp;request)</code>
 <div class="block">Scan data in a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#splitRegion(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest)">splitRegion</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                       org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest&nbsp;request)</code>
 <div class="block">Split a region on the region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#start()">start</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#startNonceOperation(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto,%20long)">startNonceOperation</a></strong>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                                       long&nbsp;nonceGroup)</code>
 <div class="block">Starts the nonce operation for a mutation, if needed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#stop()">stop</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#stopServer(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest)">stopServer</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                     org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest&nbsp;request)</code>
 <div class="block">Stop the region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#updateConfiguration(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest)">updateConfiguration</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                                       org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#updateFavoredNodes(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest)">updateFavoredNodes</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                                     org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#warmupRegion(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest)">warmupRegion</a></strong>(com.google.protobuf.RpcController&nbsp;controller,
                         org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest&nbsp;request)</code>
@@ -698,7 +706,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.199">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.202">LOG</a></pre>
 </li>
 </ul>
 <a name="REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS">
@@ -707,7 +715,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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.202">REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.205">REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS</a></pre>
 <div class="block">RPC scheduler to use for the region server.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.RSRpcServices.REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS">Constant Field Values</a></dd></dl>
 </li>
@@ -718,7 +726,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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.210">REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.213">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>
@@ -731,7 +739,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.215">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.218">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="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.RSRpcServices.DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA">Constant Field Values</a></dd></dl>
 </li>
@@ -742,7 +750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCount</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Counter.html" title="class in org.apache.hadoop.hbase.util">Counter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.218">requestCount</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Counter.html" title="class in org.apache.hadoop.hbase.util">Counter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.221">requestCount</a></pre>
 </li>
 </ul>
 <a name="rpcServer">
@@ -751,7 +759,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.220">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.223">rpcServer</a></pre>
 </li>
 </ul>
 <a name="isa">
@@ -760,7 +768,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/7/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.221">isa</a></pre>
+<pre>final&nbsp;<a href="http://docs.oracle.com/javase/7/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.224">isa</a></pre>
 </li>
 </ul>
 <a name="regionServer">
@@ -769,7 +777,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.223">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.226">regionServer</a></pre>
 </li>
 </ul>
 <a name="maxScannerResultSize">
@@ -778,7 +786,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.224">maxScannerResultSize</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.227">maxScannerResultSize</a></pre>
 </li>
 </ul>
 <a name="priority">
@@ -787,7 +795,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.227">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.230">priority</a></pre>
 </li>
 </ul>
 <a name="scannerIdGen">
@@ -796,7 +804,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>scannerIdGen</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.229">scannerIdGen</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.232">scannerIdGen</a></pre>
 </li>
 </ul>
 <a name="scanners">
@@ -805,7 +813,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/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/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.230">scanners</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/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.233">scanners</a></pre>
 </li>
 </ul>
 <a name="scannerLeaseTimeoutPeriod">
@@ -814,7 +822,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.236">scannerLeaseTimeoutPeriod</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.239">scannerLeaseTimeoutPeriod</a></pre>
 <div class="block">The lease timeout period for client scanners (milliseconds).</div>
 </li>
 </ul>
@@ -824,7 +832,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.241">rpcTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.244">rpcTimeout</a></pre>
 <div class="block">The RPC timeout period (milliseconds)</div>
 </li>
 </ul>
@@ -834,7 +842,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockListLast">
 <li class="blockList">
 <h4>minimumScanTimeLimitDelta</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.246">minimumScanTimeLimitDelta</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.249">minimumScanTimeLimitDelta</a></pre>
 <div class="block">The minimum allowable delta to use for the scan limit</div>
 </li>
 </ul>
@@ -852,7 +860,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.951">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.955">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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -872,7 +880,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.383">getResultOrException</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Result&nbsp;r,
+<pre>private static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.386">getResultOrException</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Result&nbsp;r,
                                                                                              int&nbsp;index,
                                                                                              org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;stats)</pre>
 </li>
@@ -883,7 +891,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.388">getResultOrException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
+<pre>private static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.391">getResultOrException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e,
                                                                                              int&nbsp;index)</pre>
 </li>
 </ul>
@@ -893,7 +901,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrException</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.392">getResultOrException</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
+<pre>private static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.395">getResultOrException</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException.Builder&nbsp;builder,
                                                                                              int&nbsp;index)</pre>
 </li>
 </ul>
@@ -903,7 +911,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>startNonceOperation</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.403">startNonceOperation</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.406">startNonceOperation</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
                        long&nbsp;nonceGroup)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                  <a href="../../../../../org/apache/hadoop/hbase/exceptions/OperationConflictException.html" title="class in org.apache.hadoop.hbase.exceptions">OperationConflictException</a></pre>
@@ -920,7 +928,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.429">endNonceOperation</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto&nbsp;mutation,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.432">endNonceOperation</a>(org.apache.hadoop.hbase.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>
@@ -933,7 +941,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.439">isClientCellBlockSupport</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.442">isClientCellBlockSupport</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if current call supports cellblocks</dd></dl>
 </li>
 </ul>
@@ -943,7 +951,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.444">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.447">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.protobuf.generated.ClientProtos.MutateResponse.Builder, org.apache.hadoop.hbase.client.Result, org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController)">
@@ -952,7 +960,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.448">addResult</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.451">addResult</a>(org.apache.hadoop.hbase.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/PayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">PayloadCarryingRpcController</a>&nbsp;rpcc)</pre>
 </li>
@@ -963,7 +971,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.460">addResults</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.463">addResults</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse.Builder&nbsp;builder,
               <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;results,
               com.google.protobuf.RpcController&nbsp;controller,
               boolean&nbsp;isDefaultRegion,
@@ -976,7 +984,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRows</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.487">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;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.490">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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.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)
                                                                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -992,7 +1000,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.530">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.533">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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.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,
@@ -1013,7 +1021,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.570">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.573">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.protobuf.generated.ClientProtos.MutationProto&nbsp;m,
             <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cellScanner,
@@ -1033,7 +1041,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.607">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.610">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.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,
@@ -1052,7 +1060,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>doNonAtomicRegionMutation</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/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.650">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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/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.653">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.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,
@@ -1074,7 +1082,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.793">doBatchOp</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult.Builder&nbsp;builder,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.797">doBatchOp</a>(org.apache.hadoop.hbase.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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Action&gt;&nbsp;mutations,
@@ -1089,7 +1097,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.873">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.877">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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1108,7 +1116,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.939">closeAllScanners</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.943">closeAllScanners</a>()</pre>
 </li>
 </ul>
 <a name="onConfigurationChange(org.apache.hadoop.conf.Configuration)">
@@ -1117,7 +1125,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.1026">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.1030">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">ConfigurationObserver</a></code></strong></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>
@@ -1133,7 +1141,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.1032">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.1036">createPriority</a>()</pre>
 </li>
 </ul>
 <a name="getHostname(org.apache.hadoop.conf.Configuration, boolean)">
@@ -1142,7 +1150,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getHostname</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1036">getHostname</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1040">getHostname</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                  boolean&nbsp;isMaster)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1155,7 +1163,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre><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.1051">getScanner</a>(long&nbsp;scannerId)</pre>
+<pre><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.1055">getScanner</a>(long&nbsp;scannerId)</pre>
 </li>
 </ul>
 <a name="getScannerVirtualTime(long)">
@@ -1164,18 +1172,31 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannerVirtualTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1064">getScannerVirtualTime</a>(long&nbsp;scannerId)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1068">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>
 </ul>
+<a name="addSize(org.apache.hadoop.hbase.ipc.RpcCallContext, org.apache.hadoop.hbase.client.Result, java.lang.Object)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addSize</h4>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1081">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/7/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>
+<dl><dt><span class="strong">Returns:</span></dt><dd>an object that represents the last referenced block from this response.</dd></dl>
+</li>
+</ul>
 <a name="addScanner(java.lang.String, org.apache.hadoop.hbase.regionserver.RegionScanner, org.apache.hadoop.hbase.regionserver.Region)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>addScanner</h4>
-<pre><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.1073">addScanner</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
+<pre><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.1115">addScanner</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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)
                                        throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.LeaseStillHeldException.html" title="class in org.apache.hadoop.hbase.regionserver">Leases.LeaseStillHeldException</a></pre>
@@ -1189,7 +1210,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegion</h4>
-<pre><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.1098">getRegion</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)
+<pre><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.1140">getRegion</a>(org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier&nbsp;regionSpecifier)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Find the HRegion based on a region specifier</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>regionSpecifier</code> - the region specifier</dd>
@@ -1205,7 +1226,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.1105">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.1147">getPriority</a>()</pre>
 </li>
 </ul>
 <a name="getConfiguration()">
@@ -1214,7 +1235,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.1110">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1152">getConfiguration</a>()</pre>
 </li>
 </ul>
 <a name="getQuotaManager()">
@@ -1223,7 +1244,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1114">getQuotaManager</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1156">getQuotaManager</a>()</pre>
 </li>
 </ul>
 <a name="start()">
@@ -1232,7 +1253,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1118">start</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1160">start</a>()</pre>
 </li>
 </ul>
 <a name="stop()">
@@ -1241,7 +1262,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1122">stop</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1164">stop</a>()</pre>
 </li>
 </ul>
 <a name="checkOpen()">
@@ -1250,7 +1271,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <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.1132">checkOpen</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.1174">checkOpen</a>()
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Called to verify that this server is up and running.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1263,7 +1284,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/HBaseRPCErrorHand
 <ul class="blockList">
 <li class="blockList">
 <h4>getServices</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/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.1150">getServi

<TRUNCATED>

[23/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 feed20b..abb8a15 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
@@ -31,2767 +31,2812 @@
 <span class="sourceLineNo">023</span>import java.net.BindException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.net.InetSocketAddress;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.net.UnknownHostException;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Iterator;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map.Entry;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.commons.logging.Log;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.logging.LogFactory;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Cell;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HConstants;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ServerName;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.TableName;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Append;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Get;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Put;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.security.User;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.zookeeper.KeeperException;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>import com.google.common.annotations.VisibleForTesting;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import com.google.protobuf.ByteString;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import com.google.protobuf.Message;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import com.google.protobuf.RpcController;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import com.google.protobuf.ServiceException;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@InterfaceAudience.Private<a name="line.194"></a>
-<span class="sourceLineNo">195</span>@SuppressWarnings("deprecation")<a name="line.195"></a>
-<span class="sourceLineNo">196</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ConfigurationObserver {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /** RPC scheduler to use for the region server. */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  final Counter requestCount = new Counter();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  // Server to handle client requests.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  final RpcServerInterface rpcServer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  final InetSocketAddress isa;<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private final HRegionServer regionServer;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private final long maxScannerResultSize;<a name="line.224"></a>
+<span class="sourceLineNo">026</span>import java.nio.ByteBuffer;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.HashMap;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Map.Entry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.NavigableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Set;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.commons.logging.Log;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.commons.logging.LogFactory;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.conf.Configuration;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.Cell;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Append;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Get;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Result;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.security.User;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.zookeeper.KeeperException;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>import com.google.common.annotations.VisibleForTesting;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import com.google.protobuf.ByteString;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import com.google.protobuf.Message;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import com.google.protobuf.RpcController;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import com.google.protobuf.ServiceException;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.195"></a>
+<span class="sourceLineNo">196</span> */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>@InterfaceAudience.Private<a name="line.197"></a>
+<span class="sourceLineNo">198</span>@SuppressWarnings("deprecation")<a name="line.198"></a>
+<span class="sourceLineNo">199</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    ConfigurationObserver {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** RPC scheduler to use for the region server. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  final Counter requestCount = new Counter();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // Server to handle client requests.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  final RpcServerInterface rpcServer;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  final InetSocketAddress isa;<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  // The reference to the priority extraction function<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private final PriorityFunction priority;<a name="line.227"></a>
+<span class="sourceLineNo">226</span>  private final HRegionServer regionServer;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  private final long maxScannerResultSize;<a name="line.227"></a>
 <span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * The RPC timeout period (milliseconds)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private final int rpcTimeout;<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The minimum allowable delta to use for the scan limit<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  private final long minimumScanTimeLimitDelta;<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>   * An Rpc callback for closing a RegionScanner.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    private final RegionScanner scanner;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.scanner = scanner;<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>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void run() throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      this.scanner.close();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    private final String scannerName;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    private final RegionScanner scanner;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final Lease lease;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      this.scannerName = scannerName;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.scanner = scanner;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.lease = lease;<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public void run() throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.scanner.shipped();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (scanners.containsKey(scannerName)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * completion of multiGets.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public void addScanner(RegionScanner scanner) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.scanners.add(scanner);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public void run() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      for (RegionScanner scanner : scanners) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          scanner.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static class RegionScannerHolder {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private RegionScanner s;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    private Region r;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final RpcCallback closeCallBack;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final RpcCallback shippedCallback;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        RpcCallback shippedCallback) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.s = s;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.r = r;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.closeCallBack = closeCallBack;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.shippedCallback = shippedCallback;<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 getNextCallSeq() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      return nextCallSeq.get();<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 void incNextCallSeq() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      nextCallSeq.incrementAndGet();<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 rollbackNextCallSeq() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      nextCallSeq.decrementAndGet();<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * closed<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private class ScannerListener implements LeaseListener {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    private final String scannerName;<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    ScannerListener(final String n) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      this.scannerName = n;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public void leaseExpired() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (rsh != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        RegionScanner s = rsh.s;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        try {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          s.close();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        } catch (IOException e) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          LOG.error("Closing scanner for "<a name="line.373"></a>
-<span class="sourceLineNo">374</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " scanner found, hence no chance to close that related scanner!");<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>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static ResultOrException getResultOrException(<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      final ClientProtos.Result r, final int index, final ClientProtos.RegionLoadStats stats) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return getResultOrException(ResponseConverter.buildActionResult(r, stats), index);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      final ResultOrException.Builder builder, final int index) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return builder.setIndex(index).build();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param mutation Mutation.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param nonceGroup Nonce group from the request.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @returns Nonce used (can be NO_NONCE).<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  private long startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      throws IOException, OperationConflictException {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return HConstants.NO_NONCE;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    boolean canProceed = false;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    try {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    } catch (InterruptedException ex) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    if (!canProceed) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      // TODO: instead, we could convert append/increment to get w/mvcc<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      String message = "The operation with nonce {" + nonceGroup + ", " + mutation.getNonce()<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        + "} on row [" + Bytes.toString(mutation.getRow().toByteArray())<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        + "] may have already completed";<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      throw new OperationConflictException(message);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    return mutation.getNonce();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * Ends nonce operation for a mutation, if needed.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @param mutation Mutation.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      long nonceGroup, boolean success) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<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><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return True if current call supports cellblocks<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private boolean isClientCellBlockSupport() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    RpcCallContext context = RpcServer.getCurrentCall();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final PayloadCarryingRpcController rpcc) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (result == null) return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (isClientCellBlockSupport()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      builder.setResult(pbr);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private void addResults(final ScanResponse.Builder builder, final List&lt;Result&gt; results,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final RpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    builder.setStale(!isDefaultRegion);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (results == null || results.isEmpty()) return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    if (clientCellBlockSupported) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (Result res : results) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        builder.addCellsPerResult(res.size());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        builder.addPartialFlagPerResult(res.isPartial());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      ((PayloadCarryingRpcController)controller).<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        setCellScanner(CellUtil.createCellScanner(results));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    } else {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      for (Result res: results) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        builder.addResults(pbr);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<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>   * Mutate a list of rows atomically.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param region<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param actions<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @throws IOException<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private ClientProtos.RegionLoadStats mutateRows(final Region region,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      final CellScanner cellScanner) throws IOException {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    RowMutations rm = null;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    for (ClientProtos.Action action: actions) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      if (action.hasGet()) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          action.getGet());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      MutationType type = action.getMutation().getMutateType();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (rm == null) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        rm = new RowMutations(action.getMutation().getRow().toByteArray());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      switch (type) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        case PUT:<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          rm.add(ProtobufUtil.toPut(action.getMutation(), cellScanner));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          break;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        case DELETE:<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          rm.add(ProtobufUtil.toDelete(action.getMutation(), cellScanner));<a name="line.508"></a>
+<span class="sourceLineNo">229</span>  // The reference to the priority extraction function<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private final PriorityFunction priority;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  private final long minimumScanTimeLimitDelta;<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * An Rpc callback for closing a RegionScanner.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    private final RegionScanner scanner;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      this.scanner = scanner;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public void run() throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      this.scanner.close();<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    private final String scannerName;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    private final RegionScanner scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    private final Lease lease;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.scannerName = scannerName;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.scanner = scanner;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.lease = lease;<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      this.scanner.shipped();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (scanners.containsKey(scannerName)) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<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><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * completion of multiGets.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public void addScanner(RegionScanner scanner) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      this.scanners.add(scanner);<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>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (RegionScanner scanner : scanners) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        try {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          scanner.close();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } catch (IOException e) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private static class RegionScannerHolder {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private RegionScanner s;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private Region r;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final RpcCallback closeCallBack;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final RpcCallback shippedCallback;<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        RpcCallback shippedCallback) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.s = s;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.r = r;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.closeCallBack = closeCallBack;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.shippedCallback = shippedCallback;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private long getNextCallSeq() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return nextCallSeq.get();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    private void incNextCallSeq() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      nextCallSeq.incrementAndGet();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private void rollbackNextCallSeq() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      nextCallSeq.decrementAndGet();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * closed<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private class ScannerListener implements LeaseListener {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private final String scannerName;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    ScannerListener(final String n) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      this.scannerName = n;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public void leaseExpired() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (rsh != null) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        RegionScanner s = rsh.s;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          s.close();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        } catch (IOException e) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          LOG.error("Closing scanner for "<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="

<TRUNCATED>

[33/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     * connections will be looked at for the cleanup.<a name="lin

<TRUNCATED>

[29/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.BulkHFileVisitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.BulkHFileVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.BulkHFileVisitor.html
index 5952d6a..7c00453 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.BulkHFileVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.BulkHFileVisitor.html
@@ -433,654 +433,655 @@
 <span class="sourceLineNo">425</span>   * @param hfilesDir directory containing list of hfiles to be loaded into the table<a name="line.425"></a>
 <span class="sourceLineNo">426</span>   * @param table table to which hfiles should be loaded<a name="line.426"></a>
 <span class="sourceLineNo">427</span>   * @param queue queue which needs to be loaded into the table<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @throws IOException If any I/O or network error occurred<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public void prepareHFileQueue(Path hfofDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      boolean validateHFile) throws IOException {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    discoverLoadQueue(queue, hfofDir, validateHFile);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private ExecutorService createExecutorService() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return pool;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for (HColumnDescriptor family : families) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      familyNames.add(family.getNameAsString());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    while (queueIter.hasNext()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      LoadQueueItem lqi = queueIter.next();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        unmatchedFamilies.add(familyNameInHFile);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      String msg =<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              + familyNames;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      LOG.error(msg);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      throw new IOException(msg);<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><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  /**<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * {@link<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @param table Table to which these hfiles should be loaded to<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param conn Connection to use<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    ExecutorService pool = null;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      pool = createExecutorService();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (pool != null) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        pool.shutdown();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>  /**<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * them.  Any failures are re-queued for another pass with the<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * groupOrSplitPhase.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // atomically bulk load the groups.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      final byte[] first = e.getKey().array();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        @Override<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.517"></a>
-<span class="sourceLineNo">518</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return toRetry;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      };<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      try {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>        // LQIs that are requeued to be regrouped.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        queue.addAll(toRetry);<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>      } catch (ExecutionException e1) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        Throwable t = e1.getCause();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (t instanceof IOException) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // At this point something unrecoverable has happened.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          // TODO Implement bulk load recovery<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        throw new IllegalStateException(t);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      } catch (InterruptedException e1) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    for (Entry&lt;ByteBuffer,<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      for (LoadQueueItem lqi: lqis) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        if (count == null) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>          count = new MutableInt();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>          filesMap.put(lqi.family, count);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>        }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        count.increment();<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            + " of region with start key "<a name="line.565"></a>
-<span class="sourceLineNo">566</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          return false;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   */<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    // phase because of the puts that happen in futures.<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    // drain LQIs and figure out bulk load groups<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    while (!queue.isEmpty()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      final LoadQueueItem item = queue.remove();<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          return splits;<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        }<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      };<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      splittingFutures.add(pool.submit(call));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    // get all the results.  All grouping and splitting must finish before<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    // we can attempt the atomic loads.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      try {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        if (splits != null) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          queue.addAll(splits);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      } catch (ExecutionException e1) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        Throwable t = e1.getCause();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        if (t instanceof IOException) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          LOG.error("IOException during splitting", e1);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        throw new IllegalStateException(t);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      } catch (InterruptedException e1) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<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>    return regionGroups;<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>  // unique file name for the table<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  private String getUniqueName() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Table table, byte[] startKey,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      byte[] splitKey) throws IOException {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    final Path hfilePath = item.hfilePath;<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    // above.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    final String TMP_DIR = "_tmp";<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    Path tmpDir = item.hfilePath.getParent();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    if (!tmpDir.getName().equals(TMP_DIR)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      tmpDir = new Path(tmpDir, TMP_DIR);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    LOG.info("HFile at " + hfilePath + " no longer fits inside a single " +<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    "region. Splitting...");<a name="line.642"></a>
-<span class="sourceLineNo">643</span><a name="line.643"></a>
-<span class="sourceLineNo">644</span>    String uniqueName = getUniqueName();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    HColumnDescriptor familyDesc = table.getTableDescriptor().getFamily(item.family);<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    Path botOut = new Path(tmpDir, uniqueName + ".bottom");<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    Path topOut = new Path(tmpDir, uniqueName + ".top");<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    splitStoreFile(getConf(), hfilePath, familyDesc, splitKey, botOut, topOut);<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>    FileSystem fs = tmpDir.getFileSystem(getConf());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    fs.setPermission(tmpDir, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    fs.setPermission(botOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    fs.setPermission(topOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span>    // Add these back at the *front* of the queue, so there's a lower<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // chance that the region will just split again before we get there.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    List&lt;LoadQueueItem&gt; lqis = new ArrayList&lt;LoadQueueItem&gt;(2);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    lqis.add(new LoadQueueItem(item.family, botOut));<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    lqis.add(new LoadQueueItem(item.family, topOut));<a name="line.660"></a>
-<span class="sourceLineNo">661</span><a name="line.661"></a>
-<span class="sourceLineNo">662</span>    LOG.info("Successfully split into new HFiles " + botOut + " and " + topOut);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    return lqis;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * Attempt to assign the given load queue item into its target region group.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * If the hfile boundary no longer fits into a region, physically splits<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * the hfile such that the new bottom half will fit and returns the list of<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * LQI's corresponding to the resultant hfiles.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   *<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * protected for testing<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @throws IOException<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>  protected List&lt;LoadQueueItem&gt; groupOrSplit(Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups,<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      final LoadQueueItem item, final Table table,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys)<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      throws IOException {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    final Path hfilePath = item.hfilePath;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    // fs is the source filesystem<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    if (fs == null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      fs = hfilePath.getFileSystem(getConf());<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    HFile.Reader hfr = HFile.createReader(fs, hfilePath,<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        new CacheConfig(getConf()), getConf());<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    final byte[] first, last;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    try {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      hfr.loadFileInfo();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      first = hfr.getFirstRowKey();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      last = hfr.getLastRowKey();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }  finally {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      hfr.close();<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>    LOG.info("Trying to load hfile=" + hfilePath +<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        " first=" + Bytes.toStringBinary(first) +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        " last="  + Bytes.toStringBinary(last));<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (first == null || last == null) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      assert first == null &amp;&amp; last == null;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      // TODO what if this is due to a bad HFile?<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      LOG.info("hfile " + hfilePath + " has no entries, skipping");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      return null;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    }<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (Bytes.compareTo(first, last) &gt; 0) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new IllegalArgumentException(<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      "Invalid range: " + Bytes.toStringBinary(first) +<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      " &gt; " + Bytes.toStringBinary(last));<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    int idx = Arrays.binarySearch(startEndKeys.getFirst(), first,<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        Bytes.BYTES_COMPARATOR);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    if (idx &lt; 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      // not on boundary, returns -(insertion index).  Calculate region it<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // would be in.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      idx = -(idx + 1) - 1;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    final int indexForCallable = idx;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    /**<a name="line.718"></a>
-<span class="sourceLineNo">719</span>     * we can consider there is a region hole in following conditions. 1) if idx &lt; 0,then first<a name="line.719"></a>
-<span class="sourceLineNo">720</span>     * region info is lost. 2) if the endkey of a region is not equal to the startkey of the next<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * region. 3) if the endkey of the last region is not empty.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    if (indexForCallable &lt; 0) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      throw new IOException("The first region info for table "<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          + table.getName()<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    } else if ((indexForCallable == startEndKeys.getFirst().length - 1)<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        &amp;&amp; !Bytes.equals(startEndKeys.getSecond()[indexForCallable], HConstants.EMPTY_BYTE_ARRAY)) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      throw new IOException("The last region info for table "<a name="line.729"></a>
-<span class="sourceLineNo">730</span>          + table.getName()<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    } else if (indexForCallable + 1 &lt; startEndKeys.getFirst().length<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        &amp;&amp; !(Bytes.compareTo(startEndKeys.getSecond()[indexForCallable],<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          startEndKeys.getFirst()[indexForCallable + 1]) == 0)) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      throw new IOException("The endkey of one region for table "<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          + table.getName()<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          + " is not equal to the startkey of the next region in hbase:meta."<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          + "Please use hbck tool to fix it first.");<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>    boolean lastKeyInRange =<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      Bytes.compareTo(last, startEndKeys.getSecond()[idx]) &lt; 0 ||<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      Bytes.equals(startEndKeys.getSecond()[idx], HConstants.EMPTY_BYTE_ARRAY);<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    if (!lastKeyInRange) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      List&lt;LoadQueueItem&gt; lqis = splitStoreFile(item, table,<a name="line.745"></a>
-<span class="sourceLineNo">746</span>          startEndKeys.getFirst()[indexForCallable],<a name="line.746"></a>
-<span class="sourceLineNo">747</span>          startEndKeys.getSecond()[indexForCallable]);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      return lqis;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>    // group regions.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    regionGroups.put(ByteBuffer.wrap(startEndKeys.getFirst()[idx]), item);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return null;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * Attempts to do an atomic load of many hfiles into a region.  If it fails,<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   * it returns a list of hfiles that need to be retried.  If it is successful<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * it will return an empty list.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   *<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * NOTE: To maintain row atomicity guarantees, region server callable should<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * succeed atomically and fails atomically.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   *<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * Protected for testing.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @return empty list if success, list of items to retry on recoverable<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * failure<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  protected List&lt;LoadQueueItem&gt; tryAtomicRegionLoad(final Connection conn,<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      final TableName tableName, final byte[] first, final Collection&lt;LoadQueueItem&gt; lqis)<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  throws IOException {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; famPaths =<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;(lqis.size());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    for (LoadQueueItem lqi : lqis) {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      famPaths.add(Pair.newPair(lqi.family, lqi.hfilePath.toString()));<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final RegionServerCallable&lt;Boolean&gt; svrCallable =<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        new RegionServerCallable&lt;Boolean&gt;(conn, tableName, first) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      @Override<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      public Boolean call(int callTimeout) throws Exception {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        SecureBulkLoadClient secureClient = null;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        boolean success = false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span>        try {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("Going to connect to server " + getLocation() + " for row "<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              + Bytes.toStringBinary(getRow()) + " with hfile group " + famPaths);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>          byte[] regionName = getLocation().getRegionInfo().getRegionName();<a name="line.788"></a>
-<span class="sourceLineNo">789</span>          if (!isSecureBulkLoadEndpointAvailable()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            success = ProtobufUtil.bulkLoadHFile(getStub(), famPaths, regionName, assignSeqIds);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>          } else {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            try (Table table = conn.getTable(getTableName())) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>              secureClient = new SecureBulkLoadClient(table);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              success = secureClient.bulkLoadHFiles(famPaths, fsDelegationToken.getUserToken(),<a name="line.794"></a>
-<span class="sourceLineNo">795</span>                bulkToken, getLocation().getRegionInfo().getStartKey());<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          }<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          return success;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        } finally {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          //Best effort copying of files that might not have been imported<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          //from the staging directory back to original location<a name="line.801"></a>
-<span class="sourceLineNo">802</span>          //in user directory<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          if(secureClient != null &amp;&amp; !success) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            FileSystem targetFs = FileSystem.get(getConf());<a name="line.804"></a>
-<span class="sourceLineNo">805</span>         // fs is the source filesystem<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if(fs == null) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              fs = lqis.iterator().next().hfilePath.getFileSystem(getConf());<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span>            // Check to see if the source and target filesystems are the same<a name="line.809"></a>
-<span class="sourceLineNo">810</span>            // If they are the same filesystem, we will try move the files back<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            // because previously we moved them to the staging directory.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>            if (FSHDFSUtils.isSameHdfs(getConf(), fs, targetFs)) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>              for(Pair&lt;byte[], String&gt; el : famPaths) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                Path hfileStagingPath = null;<a name="line.814"></a>
-<span class="sourceLineNo">815</span>                Path hfileOrigPath = new Path(el.getSecond());<a name="line.815"></a>
-<span class="sourceLineNo">816</span>                try {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>                  hfileStagingPath= new Path(secureClient.getStagingPath(bulkToken, el.getFirst()),<a name="line.817"></a>
-<span class="sourceLineNo">818</span>                    hfileOrigPath.getName());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>                  if(targetFs.rename(hfileStagingPath, hfileOrigPath)) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>                    LOG.debug("Moved back file " + hfileOrigPath + " from " +<a name="line.820"></a>
-<span class="sourceLineNo">821</span>                        hfileStagingPath);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>                  } else if(targetFs.exists(hfileStagingPath)){<a name="line.822"></a>
-<span class="sourceLineNo">823</span>                    LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.823"></a>
-<span class="sourceLineNo">824</span>                        hfileStagingPath);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>                  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>                } catch(Exception ex) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>                  LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.827"></a>
-<span class="sourceLineNo">828</span>                      hfileStagingPath, ex);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>                }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>              }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>            }<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          }<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    };<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>    try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      List&lt;LoadQueueItem&gt; toRetry = new ArrayList&lt;LoadQueueItem&gt;();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      Configuration conf = getConf();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      boolean success = RpcRetryingCallerFactory.instantiate(conf,<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          null).&lt;Boolean&gt; newCaller()<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          .callWithRetries(svrCallable, Integer.MAX_VALUE);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      if (!success) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        LOG.warn("Attempt to bulk load region containing "<a name="line.844"></a>
-<span class="sourceLineNo">845</span>            + Bytes.toStringBinary(first) + " into table "<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            + tableName  + " with files " + lqis<a name="line.846"></a>
-<span class="sourceLineNo">847</span>            + " failed.  This is recoverable and they will be retried.");<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        toRetry.addAll(lqis); // return lqi's to retry<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // success<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      return toRetry;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    } catch (IOException e) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      LOG.error("Encountered unrecoverable error from region server, additional details: "<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          + svrCallable.getExceptionMessageAdditionalDetail(), e);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>  }<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span>  private boolean isSecureBulkLoadEndpointAvailable() {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    String classes = getConf().get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, "");<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    return classes.contains("org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint");<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>  /**<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * Split a storefile into a top and bottom half, maintaining<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * the metadata, recreating bloom filters, etc.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   */<a name="line.867"></a>
-<span class="sourceLineNo">868</span>  static void splitStoreFile(<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      Configuration conf, Path inFile,<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      HColumnDescriptor familyDesc, byte[] splitKey,<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      Path bottomOut, Path topOut) throws IOException<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    // Open reader with no block cache, and not in-memory<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    Reference topReference = Reference.createTopReference(splitKey);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    Reference bottomReference = Reference.createBottomReference(splitKey);<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    copyHFileHalf(conf, inFile, topOut, topReference, familyDesc);<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    copyHFileHalf(conf, inFile, bottomOut, bottomReference, familyDesc);<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  }<a name="line.879"></a>
-<span class="sourceLineNo">880</span><a name="line.880"></a>
-<span class="sourceLineNo">881</span>  /**<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * Copy half of an HFile into a new HFile.<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   */<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private static void copyHFileHalf(<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      Configuration conf, Path inFile, Path outFile, Reference reference,<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      HColumnDescriptor familyDescriptor)<a name="line.886"></a>
-<span class="sourceLineNo">887</span>  throws IOException {<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    FileSystem fs = inFile.getFileSystem(conf);<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    CacheConfig cacheConf = new CacheConfig(conf);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    HalfStoreFileReader halfReader = null;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    StoreFile.Writer halfWriter = null;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    try {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      halfReader = new HalfStoreFileReader(fs, inFile, cacheConf, reference, conf);<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      Map&lt;byte[], byte[]&gt; fileInfo = halfReader.loadFileInfo();<a name="line.894"></a>
-<span class="sourceLineNo">895</span><a name="line.895"></a>
-<span class="sourceLineNo">896</span>      int blocksize = familyDescriptor.getBlocksize();<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      Algorithm compression = familyDescriptor.getCompressionType();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      BloomType bloomFilterType = familyDescriptor.getBloomFilterType();<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      HFileContext hFileContext = new HFileContextBuilder()<a name="line.899"></a>
-<span class="sourceLineNo">900</span>                                  .withCompression(compression)<a name="line.900"></a>
-<span class="sourceLineNo">901</span>                                  .withChecksumType(HStore.getChecksumType(conf))<a name="line.901"></a>
-<span class="sourceLineNo">902</span>                                  .withBytesPerCheckSum(HStore.getBytesPerChecksum(conf))<a name="line.902"></a>
-<span class="sourceLineNo">903</span>                                  .withBlockSize(blocksize)<a name="line.903"></a>
-<span class="sourceLineNo">904</span>                                  .withDataBlockEncoding(familyDescriptor.getDataBlockEncoding())<a name="line.904"></a>
-<span class="sourceLineNo">905</span>                                  .build();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      halfWriter = new StoreFile.WriterBuilder(conf, cacheConf,<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          fs)<a name="line.907"></a>
-<span class="sourceLineNo">908</span>              .withFilePath(outFile)<a name="line.908"></a>
-<span class="sourceLineNo">909</span>              .withBloomType(bloomFilterType)<a name="line.909"></a>
-<span class="sourceLineNo">910</span>              .withFileContext(hFileContext)<a name="line.910"></a>
-<span class="sourceLineNo">911</span>              .build();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      HFileScanner scanner = halfReader.getScanner(false, false, false);<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      scanner.seekTo();<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      do {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>        halfWriter.append(scanner.getCell());<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      } while (scanner.next());<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>      for (Map.Entry&lt;byte[],byte[]&gt; entry : fileInfo.entrySet()) {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        if (shouldCopyHFileMetaKey(entry.getKey())) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>          halfWriter.appendFileInfo(entry.getKey(), entry.getValue());<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    } finally {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      if (halfWriter != null) halfWriter.close();<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      if (halfReader != null) halfReader.close(cacheConf.shouldEvictOnClose());<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    }<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  private static boolean shouldCopyHFileMetaKey(byte[] key) {<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return !HFile.isReservedFileInfoKey(key);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  /*<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * Infers region boundaries for a new table.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * Parameter:<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   *   bdryMap is a map between keys to an integer belonging to {+1, -1}<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   *     If a key is a start key of a file, then it maps to +1<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   *     If a key is an end key of a file, then it maps to -1<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * Algo:<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * 1) Poll on the keys in order:<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   *    a) Keep adding the mapped values to these keys (runningSum)<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   *    b) Each time runningSum reaches 0, add the start Key from when the runningSum had started to<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   *       a boundary list.<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * 2) Return the boundary list.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   */<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  public static byte[][] inferBoundaries(TreeMap&lt;byte[], Integer&gt; bdryMap) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    ArrayList&lt;byte[]&gt; keysArray = new ArrayList&lt;byte[]&gt;();<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    int runningValue = 0;<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    byte[] currStartKey = null;<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    boolean firstBoundary = true;<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>    for (Map.Entry&lt;byte[], Integer&gt; item: bdryMap.entrySet()) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      if (runningValue == 0) currStartKey = item.getKey();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      runningValue += item.getValue();<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      if (runningValue == 0) {<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        if (!firstBoundary) keysArray.add(currStartKey);<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        firstBoundary = false;<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      }<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    return keysArray.toArray(new byte[0][0]);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  }<a name="line.962"></a>
-<span class="sourceLineNo">963</span><a name="line.963"></a>
-<span class="sourceLineNo">964</span>  /*<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   * If the table is created for the first time, then "completebulkload" reads the files twice.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>   * More modifications necessary if we want to avoid doing it.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>   */<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  private void createTable(TableName tableName, String dirPath, Admin admin) throws Exception {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    final Path hfofDir = new Path(dirPath);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    final FileSystem fs = hfofDir.getFileSystem(getConf());<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // Add column families<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Build a set of keys<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    final HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    final TreeMap&lt;byte[], Integer&gt; map = new TreeMap&lt;byte[], Integer&gt;(Bytes.BYTES_COMPARATOR);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    visitBulkHFiles(fs, hfofDir, new BulkHFileVisitor&lt;HColumnDescriptor&gt;() {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      @Override<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      public HColumnDescriptor bulkFamily(final byte[] familyName) {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        HColumnDescriptor hcd = new HColumnDescriptor(familyName);<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        htd.addFamily(hcd);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        return hcd;<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      @Override<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      public void bulkHFile(final HColumnDescriptor hcd, final FileStatus hfileStatus)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          throws IOException {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        Path hfile = hfileStatus.getPath();<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        HFile.Reader reader = HFile.createReader(fs, hfile,<a name="line.987"></a>
-<span class="sourceLineNo">988</span>            new CacheConfig(getConf()), getConf());<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>          if (hcd.getCompressionType() != reader.getFileContext().getCompression()) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            hcd.setCompressionType(reader.getFileContext().getCompression());<a name="line.991"></a>
-<span class="sourceLineNo">992</span>            LOG.info("Setting compression " + hcd.getCompressionType().name() +<a name="line.992"></a>
-<span class="sourceLineNo">993</span>                     " for family " + hcd.toString());<a name="line.993"></a>
-<span class="sourceLineNo">994</span>          }<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          reader.loadFileInfo();<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          byte[] first = reader.getFirstRowKey();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          byte[] last  = reader.getLastRowKey();<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>          LOG.info("Trying to figure out region boundaries hfile=" + hfile +<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            " first=" + Bytes.toStringBinary(first) +<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>            " last="  + Bytes.toStringBinary(last));<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span><a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          // To eventually infer start key-end key boundaries<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>          Integer value = map.containsKey(first)? map.get(first):0;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>          map.put(first, value+1);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          value = map.containsKey(last)? map.get(last):0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>          map.put(last, value-1);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        } finally {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          reader.close();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    });<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    byte[][] keys = LoadIncrementalHFiles.inferBoundaries(map);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    admin.createTable(htd, keys);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    LOG.info("Table "+ tableName +" is available!!");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @Override<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public int run(String[] args) throws Exception {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    if (args.length != 2) {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      usage();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>      return -1;<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    }<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span><a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    initialize();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    try (Connection connection = ConnectionFactory.createConnection(getConf());<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        Admin admin = connection.getAdmin()) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      String dirPath = args[0];<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      TableName tableName = TableName.valueOf(args[1]);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span><a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      boolean tableExists = admin.tableExists(tableName);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      if (!tableExists) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        if ("yes".equalsIgnoreCase(getConf().get(CREATE_TABLE_CONF_KEY, "yes"))) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>          this.createTable(tableName, dirPath, admin);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        } else {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>          String errorMsg = format("Table '%s' does not exist.", tableName);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>          LOG.error(errorMsg);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>          throw new TableNotFoundException(errorMsg);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      Path hfofDir = new Path(dirPath);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      try (Table table = connection.getTable(tableName);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          RegionLocator locator = connection.getRegionLocator(tableName)) {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          doBulkLoad(hfofDir, admin, table, locator);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    return 0;<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  public static void main(String[] args) throws Exception {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    Configuration conf = HBaseConfiguration.create();<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    int ret = ToolRunner.run(conf, new LoadIncrementalHFiles(), args);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    System.exit(ret);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>  }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  /**<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   * Called from replication sink, where it manages bulkToken(staging directory) by itself. This is<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   * used only when {@link SecureBulkLoadEndpoint} is configured in hbase.coprocessor.region.classes<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * property. This directory is used as a temporary directory where all files are initially<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   * copied/moved from user given directory, set all the required file permissions and then from<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>   * their it is finally loaded into a table. This should be set only when, one would like to manage<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>   * the staging directory by itself. Otherwise this tool will handle this by itself.<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * @param stagingDir staging directory path<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   */<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  public void setBulkToken(String stagingDir) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    this.bulkToken = stagingDir;<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>  }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span><a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>}<a name="line.1075"></a>
+<span class="sourceLineNo">428</span>   * @param validateHFile if true hfiles will be validated for its format<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException If any I/O or network error occurred<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public void prepareHFileQueue(Path hfilesDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      boolean validateHFile) throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    discoverLoadQueue(queue, hfilesDir, validateHFile);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private ExecutorService createExecutorService() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return pool;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      throws IOException {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    for (HColumnDescriptor family : families) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      familyNames.add(family.getNameAsString());<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    while (queueIter.hasNext()) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LoadQueueItem lqi = queueIter.next();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unmatchedFamilies.add(familyNameInHFile);<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>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      String msg =<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.468"></a>
+<span class="sourceLineNo">469</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              + familyNames;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      LOG.error(msg);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      throw new IOException(msg);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * {@link<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param table Table to which these hfiles should be loaded to<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @param conn Connection to use<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    ExecutorService pool = null;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    try {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      pool = createExecutorService();<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } finally {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      if (pool != null) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>        pool.shutdown();<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>  }<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>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * them.  Any failures are re-queued for another pass with the<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * groupOrSplitPhase.<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    // atomically bulk load the groups.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      final byte[] first = e.getKey().array();<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.518"></a>
+<span class="sourceLineNo">519</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return toRetry;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      };<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      try {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>        // LQIs that are requeued to be regrouped.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        queue.addAll(toRetry);<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>      } catch (ExecutionException e1) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        Throwable t = e1.getCause();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        if (t instanceof IOException) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          // At this point something unrecoverable has happened.<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          // TODO Implement bulk load recovery<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        throw new IllegalStateException(t);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (InterruptedException e1) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (Entry&lt;ByteBuffer,<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      for (LoadQueueItem lqi: lqis) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>        if (count == null) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          count = new MutableInt();<a name="line.559"></a>
+<span class="sourceLineNo">560</span>          filesMap.put(lqi.family, count);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>        }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>        count.increment();<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.563"></a>
+<span class="sourceLineNo">564</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.564"></a>
+<span class="sourceLineNo">565</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.565"></a>
+<span class="sourceLineNo">566</span>            + " of region with start key "<a name="line.566"></a>
+<span class="sourceLineNo">567</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.567"></a>
+<span class="sourceLineNo">568</span>          return false;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>        }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    return true;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    // phase because of the puts that happen in futures.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>    // drain LQIs and figure out bulk load groups<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    while (!queue.isEmpty()) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      final LoadQueueItem item = queue.remove();<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>          return splits;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        }<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      };<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      splittingFutures.add(pool.submit(call));<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    // get all the results.  All grouping and splitting must finish before<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    // we can attempt the atomic loads.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        if (splits != null) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>          queue.addAll(splits);<a name="line.606"></a>
+<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      } catch (ExecutionException e1) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>        Throwable t = e1.getCause();<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        if (t instanceof IOException) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          LOG.error("IOException during splitting", e1);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
+<span class="sourceLineNo">614</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        throw new IllegalStateException(t);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      } catch (InterruptedException e1) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return regionGroups;<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>  // unique file name for the table<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private String getUniqueName() {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.626"></a>
+<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      final Table table, byte[] startKey,<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      byte[] splitKey) throws IOException {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    final Path hfilePath = item.hfilePath;<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    // above.<a

<TRUNCATED>

[45/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index adfd555..2f064ad 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <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" />
@@ -33063,499 +33063,499 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L396">396</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L397">397</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L397">397</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L398">398</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L463">463</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L464">464</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 35 should have line break after.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L752">752</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L763">763</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L755">755</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L766">766</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L762">762</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L773">773</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L764">764</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L775">775</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L783">783</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L794">794</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L787">787</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L798">798</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L826">826</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L837">837</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L882">882</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L893">893</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L989">989</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1000">1000</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L996">996</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1007">1007</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 9, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1111">1111</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1122">1122</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 9, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1111">1111</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1122">1122</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1129">1129</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1140">1140</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1160">1160</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1171">1171</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1161">1161</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1172">1172</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1162">1162</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1173">1173</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'attemptingUser' must be private and have accessor methods.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1287">1287</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1298">1298</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1314">1314</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1325">1325</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1383">1383</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1394">1394</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1398">1398</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1409">1409</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1399">1399</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1410">1410</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 16, expected level should be 18.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1400">1400</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1411">1411</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1402">1402</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1413">1413</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1403">1403</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1414">1414</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1407">1407</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1418">1418</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1408">1408</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1419">1419</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1409">1409</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1420">1420</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1409">1409</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1420">1420</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1410">1410</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1421">1421</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1410">1410</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1421">1421</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1411">1411</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1422">1422</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 16, expected level should be 18.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1412">1412</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1423">1423</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 16, expected level should be 18.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1412">1412</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1423">1423</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1413">1413</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1424">1424</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1414">1414</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1425">1425</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1414">1414</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1425">1425</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1414">1414</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1425">1425</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1415">1415</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1426">1426</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 16, expected level should be 18.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1416">1416</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1427">1427</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1419">1419</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1430">1430</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1420">1420</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1431">1431</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1420">1420</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1431">1431</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1430">1430</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1441">1441</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1597">1597</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1608">1608</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1598">1598</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1609">1609</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1680">1680</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1691">1691</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1681">1681</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1692">1692</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1701">1701</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1712">1712</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1703">1703</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1714">1714</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1759">1759</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1770">1770</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1764">1764</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1775">1775</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1766">1766</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1777">1777</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1772">1772</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1783">1783</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1789">1789</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1800">1800</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1798">1798</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1809">1809</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1807">1807</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1818">1818</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1837">1837</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1848">1848</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1838">1838</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1849">1849</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1839">1839</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1850">1850</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1879">1879</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1890">1890</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1958">1958</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1969">1969</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 11 should have line break after.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1960">1960</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1971">1971</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 13 should have line break after.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1962">1962</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1973">1973</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 11 should have line break after.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1964">1964</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L1975">1975</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2020">2020</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2031">2031</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2024">2024</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2035">2035</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2025">2025</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2036">2036</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2119">2119</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2130">2130</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2123">2123</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2134">2134</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 46 should have line break after.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2144">2144</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2155">2155</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2154">2154</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2165">2165</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2176">2176</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2187">2187</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2177">2177</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2188">2188</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2250">2250</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2261">2261</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2255">2255</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2266">2266</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2256">2256</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2267">2267</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2349">2349</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2360">2360</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2411">2411</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2422">2422</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2427">2427</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2438">2438</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2432">2432</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/ipc/RpcServer.html#L2443">2443</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.ipc.RpcServerInterface.java">org/apache/hadoop/hbase/ipc/RpcServerInterface.java</h3>
 <table border="0" class="table table-striped">
@@ -35847,73 +35847,73 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'?' have incorrect indentation level 8, expected level should be 11.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L552">552</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L553">553</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L552">552</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L553">553</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'&quot;region. Splitting...&quot;' have incorrect indentation level 4, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L642">642</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L643">643</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 4, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L642">642</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L643">643</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L673">673</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L674">674</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L767">767</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L768">768</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L872">872</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L873">873</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L924">924</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L925">925</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L925">925</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L926">926</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L953">953</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L954">954</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L956">956</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L957">957</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 10, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L1049">1049</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#L1050">1050</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.mapreduce.MultiTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormat.java</h3>
 <table border="0" class="table table-striped">
@@ -53652,61 +53652,61 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3177">3177</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3183">3183</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3177">3177</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3183">3183</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3178">3178</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3184">3184</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3178">3178</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3184">3184</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3179">3179</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3185">3185</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3180">3180</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3186">3186</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3181">3181</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3187">3187</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3182">3182</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3188">3188</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3183">3183</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3189">3189</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 6, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3184">3184</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html#L3190">3190</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</h3>
 <table border="0" class="table table-striped">
@@ -61428,835 +61428,835 @@
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L184">184</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L187">187</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'class def modifier' have incorrect indentation level 3, expected level should be 2.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L251">251</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L254">254</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L286">286</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L289">289</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'class def modifier' have incorrect indentation level 3, expected level should be 2.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L295">295</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L298">298</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L405">405</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L408">408</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L450">450</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L453">453</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L463">463</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L466">466</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L482">482</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L485">485</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L483">483</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L486">486</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L485">485</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L488">488</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L521">521</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L524">524</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L522">522</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L525">525</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L524">524</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L527">527</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L525">525</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L528">528</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L526">526</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L529">529</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L527">527</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L530">530</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L557">557</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L560">560</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L563">563</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L566">566</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L564">564</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L567">567</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L565">565</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L568">568</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L567">567</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L570">570</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L568">568</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L571">571</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L602">602</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L605">605</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L603">603</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L606">606</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L605">605</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L608">608</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L640">640</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L643">643</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L641">641</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L644">644</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L642">642</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L645">645</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L643">643</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L646">646</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L645">645</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L648">648</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L672">672</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L677">677</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L789">789</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L793">793</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L790">790</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L794">794</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L791">791</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L795">795</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L866">866</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L870">870</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L867">867</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L871">871</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L868">868</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L872">872</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L871">871</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L875">875</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L929">929</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L933">933</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1096">1096</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1138">1138</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1130">1130</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1172">1172</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1207">1207</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1249">1249</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1250">1250</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1292">1292</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1308">1308</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1350">1350</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1402">1402</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1444">1444</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1452">1452</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1494">1494</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1517">1517</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1559">1559</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1677">1677</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1719">1719</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1727">1727</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1769">1769</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1828">1828</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1870">1870</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1858">1858</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1900">1900</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1881">1881</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1923">1923</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1924">1924</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1966">1966</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2019">2019</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2061">2061</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2132">2132</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2183">2183</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2234">2234</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2285">2285</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2265">2265</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2316">2316</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2267">2267</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2318">2318</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2268">2268</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2319">2319</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2269">2269</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2320">2320</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2271">2271</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2322">2322</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2272">2272</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2323">2323</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2273">2273</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2324">2324</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2274">2274</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2325">2325</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2274">2274</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2325">2325</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2275">2275</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2326">2326</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2275">2275</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2326">2326</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2276">2276</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2327">2327</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2277">2277</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2328">2328</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2277">2277</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2328">2328</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2278">2278</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2329">2329</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2278">2278</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2329">2329</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2279">2279</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2330">2330</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2279">2279</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2330">2330</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2280">2280</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2331">2331</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2280">2280</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2331">2331</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2281">2281</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2332">2332</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2281">2281</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2332">2332</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2282">2282</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2333">2333</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2282">2282</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2333">2333</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2284">2284</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2335">2335</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2285">2285</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2336">2336</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2287">2287</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2338">2338</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2288">2288</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2339">2339</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2289">2289</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2340">2340</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2289">2289</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2340">2340</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2291">2291</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2342">2342</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 14, expected level should be 16.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2292">2292</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2343">2343</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2294">2294</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2345">2345</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2295">2295</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2346">2346</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2296">2296</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2347">2347</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2297">2297</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2348">2348</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2298">2298</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2349">2349</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2298">2298</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2349">2349</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2299">2299</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2350">2350</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else rcurly' have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2300">2300</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2351">2351</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2301">2301</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2352">2352</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2302">2302</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2353">2353</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2303">2303</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2354">2354</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2303">2303</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2354">2354</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2304">2304</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2355">2355</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2304">2304</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2355">2355</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2305">2305</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2356">2356</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2306">2306</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2357">2357</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2306">2306</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2357">2357</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2307">2307</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2358">2358</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2307">2307</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2358">2358</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2308">2308</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2359">2359</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2308">2308</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2359">2359</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2309">2309</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2360">2360</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2309">2309</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2360">2360</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2310">2310</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2361">2361</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2310">2310</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2361">2361</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2311">2311</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2362">2362</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def type' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2311">2311</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2362">2362</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2313">2313</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2364">2364</a></td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 14.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2314">2314</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2365">2365</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 12.</td>
-<td><a href="./x

<TRUNCATED>

[46/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index ca0b973..78d7fbc 100644
--- a/book.html
+++ b/book.html
@@ -32900,7 +32900,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 2.0.0-SNAPSHOT<br>
-Last updated 2015-12-17 14:40:30 UTC
+Last updated 2015-12-18 14:32:47 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index f4ee911..fda75fb 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 


[06/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/ipc/RpcServer.html b/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
index eeab98f..99d4beb 100644
--- a/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
+++ b/xref/org/apache/hadoop/hbase/ipc/RpcServer.html
@@ -329,2322 +329,2333 @@
 <a class="jxr_linenumber" name="319" href="#319">319</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> callback;
 <a class="jxr_linenumber" name="320" href="#320">320</a> 
 <a class="jxr_linenumber" name="321" href="#321">321</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> responseCellSize = 0;
-<a class="jxr_linenumber" name="322" href="#322">322</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> retryImmediatelySupported;
-<a class="jxr_linenumber" name="323" href="#323">323</a> 
-<a class="jxr_linenumber" name="324" href="#324">324</a>     <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">Call</a>(<strong class="jxr_keyword">int</strong> id, <strong class="jxr_keyword">final</strong> BlockingService service, <strong class="jxr_keyword">final</strong> MethodDescriptor md, RequestHeader header,
-<a class="jxr_linenumber" name="325" href="#325">325</a>          Message param, <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html">CellScanner</a> cellScanner, <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> connection, <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">Responder</a> responder,
-<a class="jxr_linenumber" name="326" href="#326">326</a>          <strong class="jxr_keyword">long</strong> size, TraceInfo tinfo, <strong class="jxr_keyword">final</strong> InetAddress remoteAddress) {
-<a class="jxr_linenumber" name="327" href="#327">327</a>       <strong class="jxr_keyword">this</strong>.id = id;
-<a class="jxr_linenumber" name="328" href="#328">328</a>       <strong class="jxr_keyword">this</strong>.service = service;
-<a class="jxr_linenumber" name="329" href="#329">329</a>       <strong class="jxr_keyword">this</strong>.md = md;
-<a class="jxr_linenumber" name="330" href="#330">330</a>       <strong class="jxr_keyword">this</strong>.header = header;
-<a class="jxr_linenumber" name="331" href="#331">331</a>       <strong class="jxr_keyword">this</strong>.param = param;
-<a class="jxr_linenumber" name="332" href="#332">332</a>       <strong class="jxr_keyword">this</strong>.cellScanner = cellScanner;
-<a class="jxr_linenumber" name="333" href="#333">333</a>       <strong class="jxr_keyword">this</strong>.connection = connection;
-<a class="jxr_linenumber" name="334" href="#334">334</a>       <strong class="jxr_keyword">this</strong>.timestamp = System.currentTimeMillis();
-<a class="jxr_linenumber" name="335" href="#335">335</a>       <strong class="jxr_keyword">this</strong>.response = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="336" href="#336">336</a>       <strong class="jxr_keyword">this</strong>.delayResponse = false;
-<a class="jxr_linenumber" name="337" href="#337">337</a>       <strong class="jxr_keyword">this</strong>.responder = responder;
-<a class="jxr_linenumber" name="338" href="#338">338</a>       <strong class="jxr_keyword">this</strong>.isError = false;
-<a class="jxr_linenumber" name="339" href="#339">339</a>       <strong class="jxr_keyword">this</strong>.size = size;
-<a class="jxr_linenumber" name="340" href="#340">340</a>       <strong class="jxr_keyword">this</strong>.tinfo = tinfo;
-<a class="jxr_linenumber" name="341" href="#341">341</a>       <strong class="jxr_keyword">this</strong>.user = connection.user;
-<a class="jxr_linenumber" name="342" href="#342">342</a>       <strong class="jxr_keyword">this</strong>.remoteAddress = remoteAddress;
-<a class="jxr_linenumber" name="343" href="#343">343</a>       <strong class="jxr_keyword">this</strong>.retryImmediatelySupported = connection.retryImmediatelySupported;
-<a class="jxr_linenumber" name="344" href="#344">344</a>     }
-<a class="jxr_linenumber" name="345" href="#345">345</a> 
-<a class="jxr_linenumber" name="346" href="#346">346</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="347" href="#347">347</a> <em class="jxr_javadoccomment">     * Call is done. Execution happened and we returned results to client. It is now safe to</em>
-<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">     * cleanup.</em>
-<a class="jxr_linenumber" name="349" href="#349">349</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="350" href="#350">350</a>     <strong class="jxr_keyword">void</strong> done() {
-<a class="jxr_linenumber" name="351" href="#351">351</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.cellBlock != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="352" href="#352">352</a>         <em class="jxr_comment">// Return buffer to reservoir now we are done with it.</em>
-<a class="jxr_linenumber" name="353" href="#353">353</a>         reservoir.putBuffer(<strong class="jxr_keyword">this</strong>.cellBlock);
-<a class="jxr_linenumber" name="354" href="#354">354</a>         <strong class="jxr_keyword">this</strong>.cellBlock = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="355" href="#355">355</a>       }
-<a class="jxr_linenumber" name="356" href="#356">356</a>       <strong class="jxr_keyword">this</strong>.connection.decRpcCount();  <em class="jxr_comment">// Say that we're done with this call.</em>
-<a class="jxr_linenumber" name="357" href="#357">357</a>     }
-<a class="jxr_linenumber" name="358" href="#358">358</a> 
-<a class="jxr_linenumber" name="359" href="#359">359</a>     @Override
-<a class="jxr_linenumber" name="360" href="#360">360</a>     <strong class="jxr_keyword">public</strong> String toString() {
-<a class="jxr_linenumber" name="361" href="#361">361</a>       <strong class="jxr_keyword">return</strong> toShortString() + <span class="jxr_string">" param: "</span> +
-<a class="jxr_linenumber" name="362" href="#362">362</a>         (<strong class="jxr_keyword">this</strong>.param != <strong class="jxr_keyword">null</strong>? ProtobufUtil.getShortTextFormat(<strong class="jxr_keyword">this</strong>.param): <span class="jxr_string">""</span>) +
-<a class="jxr_linenumber" name="363" href="#363">363</a>         <span class="jxr_string">" connection: "</span> + connection.toString();
-<a class="jxr_linenumber" name="364" href="#364">364</a>     }
-<a class="jxr_linenumber" name="365" href="#365">365</a> 
-<a class="jxr_linenumber" name="366" href="#366">366</a>     <strong class="jxr_keyword">protected</strong> RequestHeader getHeader() {
-<a class="jxr_linenumber" name="367" href="#367">367</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.header;
-<a class="jxr_linenumber" name="368" href="#368">368</a>     }
-<a class="jxr_linenumber" name="369" href="#369">369</a> 
-<a class="jxr_linenumber" name="370" href="#370">370</a>     <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="371" href="#371">371</a> <em class="jxr_comment">     * Short string representation without param info because param itself could be huge depends on</em>
-<a class="jxr_linenumber" name="372" href="#372">372</a> <em class="jxr_comment">     * the payload of a command</em>
-<a class="jxr_linenumber" name="373" href="#373">373</a> <em class="jxr_comment">     */</em>
-<a class="jxr_linenumber" name="374" href="#374">374</a>     String toShortString() {
-<a class="jxr_linenumber" name="375" href="#375">375</a>       String serviceName = <strong class="jxr_keyword">this</strong>.connection.service != <strong class="jxr_keyword">null</strong> ?
-<a class="jxr_linenumber" name="376" href="#376">376</a>           <strong class="jxr_keyword">this</strong>.connection.service.getDescriptorForType().getName() : <span class="jxr_string">"null"</span>;
-<a class="jxr_linenumber" name="377" href="#377">377</a>       <strong class="jxr_keyword">return</strong> <span class="jxr_string">"callId: "</span> + <strong class="jxr_keyword">this</strong>.id + <span class="jxr_string">" service: "</span> + serviceName +
-<a class="jxr_linenumber" name="378" href="#378">378</a>           <span class="jxr_string">" methodName: "</span> + ((<strong class="jxr_keyword">this</strong>.md != <strong class="jxr_keyword">null</strong>) ? <strong class="jxr_keyword">this</strong>.md.getName() : <span class="jxr_string">"n/a"</span>) +
-<a class="jxr_linenumber" name="379" href="#379">379</a>           <span class="jxr_string">" size: "</span> + StringUtils.TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(<strong class="jxr_keyword">this</strong>.size, <span class="jxr_string">""</span>, 1) +
-<a class="jxr_linenumber" name="380" href="#380">380</a>           <span class="jxr_string">" connection: "</span> + connection.toString();
-<a class="jxr_linenumber" name="381" href="#381">381</a>     }
-<a class="jxr_linenumber" name="382" href="#382">382</a> 
-<a class="jxr_linenumber" name="383" href="#383">383</a>     String toTraceString() {
-<a class="jxr_linenumber" name="384" href="#384">384</a>       String serviceName = <strong class="jxr_keyword">this</strong>.connection.service != <strong class="jxr_keyword">null</strong> ?
-<a class="jxr_linenumber" name="385" href="#385">385</a>                            <strong class="jxr_keyword">this</strong>.connection.service.getDescriptorForType().getName() : <span class="jxr_string">""</span>;
-<a class="jxr_linenumber" name="386" href="#386">386</a>       String methodName = (<strong class="jxr_keyword">this</strong>.md != <strong class="jxr_keyword">null</strong>) ? <strong class="jxr_keyword">this</strong>.md.getName() : <span class="jxr_string">""</span>;
-<a class="jxr_linenumber" name="387" href="#387">387</a>       <strong class="jxr_keyword">return</strong> serviceName + <span class="jxr_string">"."</span> + methodName;
-<a class="jxr_linenumber" name="388" href="#388">388</a>     }
-<a class="jxr_linenumber" name="389" href="#389">389</a> 
-<a class="jxr_linenumber" name="390" href="#390">390</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> setSaslTokenResponse(ByteBuffer response) {
-<a class="jxr_linenumber" name="391" href="#391">391</a>       <strong class="jxr_keyword">this</strong>.response = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a>(response);
-<a class="jxr_linenumber" name="392" href="#392">392</a>     }
-<a class="jxr_linenumber" name="393" href="#393">393</a> 
-<a class="jxr_linenumber" name="394" href="#394">394</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> setResponse(Object m, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html">CellScanner</a> cells,
-<a class="jxr_linenumber" name="395" href="#395">395</a>         Throwable t, String errorMsg) {
-<a class="jxr_linenumber" name="396" href="#396">396</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.isError) <strong class="jxr_keyword">return</strong>;
-<a class="jxr_linenumber" name="397" href="#397">397</a>       <strong class="jxr_keyword">if</strong> (t != <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">this</strong>.isError = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="398" href="#398">398</a>       <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a> bc = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="399" href="#399">399</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="400" href="#400">400</a>         ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();
-<a class="jxr_linenumber" name="401" href="#401">401</a>         <em class="jxr_comment">// Presume it a pb Message.  Could be null.</em>
-<a class="jxr_linenumber" name="402" href="#402">402</a>         Message result = (Message)m;
-<a class="jxr_linenumber" name="403" href="#403">403</a>         <em class="jxr_comment">// Call id.</em>
-<a class="jxr_linenumber" name="404" href="#404">404</a>         headerBuilder.setCallId(<strong class="jxr_keyword">this</strong>.id);
-<a class="jxr_linenumber" name="405" href="#405">405</a>         <strong class="jxr_keyword">if</strong> (t != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="406" href="#406">406</a>           ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();
-<a class="jxr_linenumber" name="407" href="#407">407</a>           exceptionBuilder.setExceptionClassName(t.getClass().getName());
-<a class="jxr_linenumber" name="408" href="#408">408</a>           exceptionBuilder.setStackTrace(errorMsg);
-<a class="jxr_linenumber" name="409" href="#409">409</a>           exceptionBuilder.setDoNotRetry(t instanceof <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html">DoNotRetryIOException</a>);
-<a class="jxr_linenumber" name="410" href="#410">410</a>           <strong class="jxr_keyword">if</strong> (t instanceof RegionMovedException) {
-<a class="jxr_linenumber" name="411" href="#411">411</a>             <em class="jxr_comment">// Special casing for this exception.  This is only one carrying a payload.</em>
-<a class="jxr_linenumber" name="412" href="#412">412</a>             <em class="jxr_comment">// Do this instead of build a generic system for allowing exceptions carry</em>
-<a class="jxr_linenumber" name="413" href="#413">413</a>             <em class="jxr_comment">// any kind of payload.</em>
-<a class="jxr_linenumber" name="414" href="#414">414</a>             <a href="../../../../../org/apache/hadoop/hbase/exceptions/RegionMovedException.html">RegionMovedException</a> rme = (RegionMovedException)t;
-<a class="jxr_linenumber" name="415" href="#415">415</a>             exceptionBuilder.setHostname(rme.getHostname());
-<a class="jxr_linenumber" name="416" href="#416">416</a>             exceptionBuilder.setPort(rme.getPort());
-<a class="jxr_linenumber" name="417" href="#417">417</a>           }
-<a class="jxr_linenumber" name="418" href="#418">418</a>           <em class="jxr_comment">// Set the exception as the result of the method invocation.</em>
-<a class="jxr_linenumber" name="419" href="#419">419</a>           headerBuilder.setException(exceptionBuilder.build());
-<a class="jxr_linenumber" name="420" href="#420">420</a>         }
-<a class="jxr_linenumber" name="421" href="#421">421</a>         <em class="jxr_comment">// Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the</em>
-<a class="jxr_linenumber" name="422" href="#422">422</a>         <em class="jxr_comment">// reservoir when finished. This is hacky and the hack is not contained but benefits are</em>
-<a class="jxr_linenumber" name="423" href="#423">423</a>         <em class="jxr_comment">// high when we can avoid a big buffer allocation on each rpc.</em>
-<a class="jxr_linenumber" name="424" href="#424">424</a>         <strong class="jxr_keyword">this</strong>.cellBlock = ipcUtil.buildCellBlock(<strong class="jxr_keyword">this</strong>.connection.codec,
-<a class="jxr_linenumber" name="425" href="#425">425</a>           <strong class="jxr_keyword">this</strong>.connection.compressionCodec, cells, reservoir);
-<a class="jxr_linenumber" name="426" href="#426">426</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.cellBlock != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="427" href="#427">427</a>           CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();
-<a class="jxr_linenumber" name="428" href="#428">428</a>           <em class="jxr_comment">// Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.</em>
-<a class="jxr_linenumber" name="429" href="#429">429</a>           cellBlockBuilder.setLength(<strong class="jxr_keyword">this</strong>.cellBlock.limit());
-<a class="jxr_linenumber" name="430" href="#430">430</a>           headerBuilder.setCellBlockMeta(cellBlockBuilder.build());
-<a class="jxr_linenumber" name="431" href="#431">431</a>         }
-<a class="jxr_linenumber" name="432" href="#432">432</a>         Message header = headerBuilder.build();
-<a class="jxr_linenumber" name="433" href="#433">433</a> 
-<a class="jxr_linenumber" name="434" href="#434">434</a>         <em class="jxr_comment">// Organize the response as a set of bytebuffers rather than collect it all together inside</em>
-<a class="jxr_linenumber" name="435" href="#435">435</a>         <em class="jxr_comment">// one big byte array; save on allocations.</em>
-<a class="jxr_linenumber" name="436" href="#436">436</a>         ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);
-<a class="jxr_linenumber" name="437" href="#437">437</a>         ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);
-<a class="jxr_linenumber" name="438" href="#438">438</a>         <strong class="jxr_keyword">int</strong> totalSize = bbHeader.capacity() + (bbResult == <strong class="jxr_keyword">null</strong>? 0: bbResult.limit()) +
-<a class="jxr_linenumber" name="439" href="#439">439</a>           (<strong class="jxr_keyword">this</strong>.cellBlock == <strong class="jxr_keyword">null</strong>? 0: <strong class="jxr_keyword">this</strong>.cellBlock.limit());
-<a class="jxr_linenumber" name="440" href="#440">440</a>         ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));
-<a class="jxr_linenumber" name="441" href="#441">441</a>         bc = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a>(bbTotalSize, bbHeader, bbResult, <strong class="jxr_keyword">this</strong>.cellBlock);
-<a class="jxr_linenumber" name="442" href="#442">442</a>         <strong class="jxr_keyword">if</strong> (connection.useWrap) {
-<a class="jxr_linenumber" name="443" href="#443">443</a>           bc = wrapWithSasl(bc);
-<a class="jxr_linenumber" name="444" href="#444">444</a>         }
-<a class="jxr_linenumber" name="445" href="#445">445</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="446" href="#446">446</a>         LOG.warn(<span class="jxr_string">"Exception while creating response "</span> + e);
-<a class="jxr_linenumber" name="447" href="#447">447</a>       }
-<a class="jxr_linenumber" name="448" href="#448">448</a>       <strong class="jxr_keyword">this</strong>.response = bc;
-<a class="jxr_linenumber" name="449" href="#449">449</a>       <em class="jxr_comment">// Once a response message is created and set to this.response, this Call can be treated as</em>
-<a class="jxr_linenumber" name="450" href="#450">450</a>       <em class="jxr_comment">// done. The Responder thread will do the n/w write of this message back to client.</em>
-<a class="jxr_linenumber" name="451" href="#451">451</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.callback != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="452" href="#452">452</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="453" href="#453">453</a>           <strong class="jxr_keyword">this</strong>.callback.run();
-<a class="jxr_linenumber" name="454" href="#454">454</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
-<a class="jxr_linenumber" name="455" href="#455">455</a>           <em class="jxr_comment">// Don't allow any exception here to kill this handler thread.</em>
-<a class="jxr_linenumber" name="456" href="#456">456</a>           LOG.warn(<span class="jxr_string">"Exception while running the Rpc Callback."</span>, e);
-<a class="jxr_linenumber" name="457" href="#457">457</a>         }
-<a class="jxr_linenumber" name="458" href="#458">458</a>       }
-<a class="jxr_linenumber" name="459" href="#459">459</a>     }
-<a class="jxr_linenumber" name="460" href="#460">460</a> 
-<a class="jxr_linenumber" name="461" href="#461">461</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a> wrapWithSasl(<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a> bc)
-<a class="jxr_linenumber" name="462" href="#462">462</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="463" href="#463">463</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.connection.useSasl) <strong class="jxr_keyword">return</strong> bc;
-<a class="jxr_linenumber" name="464" href="#464">464</a>       <em class="jxr_comment">// Looks like no way around this; saslserver wants a byte array.  I have to make it one.</em>
-<a class="jxr_linenumber" name="465" href="#465">465</a>       <em class="jxr_comment">// THIS IS A BIG UGLY COPY.</em>
-<a class="jxr_linenumber" name="466" href="#466">466</a>       byte [] responseBytes = bc.getBytes();
-<a class="jxr_linenumber" name="467" href="#467">467</a>       byte [] token;
-<a class="jxr_linenumber" name="468" href="#468">468</a>       <em class="jxr_comment">// synchronization may be needed since there can be multiple Handler</em>
-<a class="jxr_linenumber" name="469" href="#469">469</a>       <em class="jxr_comment">// threads using saslServer to wrap responses.</em>
-<a class="jxr_linenumber" name="470" href="#470">470</a>       <strong class="jxr_keyword">synchronized</strong> (connection.saslServer) {
-<a class="jxr_linenumber" name="471" href="#471">471</a>         token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);
-<a class="jxr_linenumber" name="472" href="#472">472</a>       }
-<a class="jxr_linenumber" name="473" href="#473">473</a>       <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
-<a class="jxr_linenumber" name="474" href="#474">474</a>         LOG.trace(<span class="jxr_string">"Adding saslServer wrapped token of size "</span> + token.length
-<a class="jxr_linenumber" name="475" href="#475">475</a>             + <span class="jxr_string">" as call response."</span>);
-<a class="jxr_linenumber" name="476" href="#476">476</a>       }
-<a class="jxr_linenumber" name="477" href="#477">477</a> 
-<a class="jxr_linenumber" name="478" href="#478">478</a>       ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));
-<a class="jxr_linenumber" name="479" href="#479">479</a>       ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);
-<a class="jxr_linenumber" name="480" href="#480">480</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a>(bbTokenLength, bbTokenBytes);
-<a class="jxr_linenumber" name="481" href="#481">481</a>     }
-<a class="jxr_linenumber" name="482" href="#482">482</a> 
-<a class="jxr_linenumber" name="483" href="#483">483</a>     @Override
-<a class="jxr_linenumber" name="484" href="#484">484</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> endDelay(Object result) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="485" href="#485">485</a>       assert <strong class="jxr_keyword">this</strong>.delayResponse;
-<a class="jxr_linenumber" name="486" href="#486">486</a>       assert <strong class="jxr_keyword">this</strong>.delayReturnValue || result == <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="487" href="#487">487</a>       <strong class="jxr_keyword">this</strong>.delayResponse = false;
-<a class="jxr_linenumber" name="488" href="#488">488</a>       delayedCalls.decrementAndGet();
-<a class="jxr_linenumber" name="489" href="#489">489</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.delayReturnValue) {
-<a class="jxr_linenumber" name="490" href="#490">490</a>         <strong class="jxr_keyword">this</strong>.setResponse(result, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="491" href="#491">491</a>       }
-<a class="jxr_linenumber" name="492" href="#492">492</a>       <strong class="jxr_keyword">this</strong>.responder.doRespond(<strong class="jxr_keyword">this</strong>);
-<a class="jxr_linenumber" name="493" href="#493">493</a>     }
-<a class="jxr_linenumber" name="494" href="#494">494</a> 
-<a class="jxr_linenumber" name="495" href="#495">495</a>     @Override
-<a class="jxr_linenumber" name="496" href="#496">496</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> endDelay() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="497" href="#497">497</a>       <strong class="jxr_keyword">this</strong>.endDelay(<strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="498" href="#498">498</a>     }
-<a class="jxr_linenumber" name="499" href="#499">499</a> 
-<a class="jxr_linenumber" name="500" href="#500">500</a>     @Override
-<a class="jxr_linenumber" name="501" href="#501">501</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> startDelay(<strong class="jxr_keyword">boolean</strong> delayReturnValue) {
-<a class="jxr_linenumber" name="502" href="#502">502</a>       assert !<strong class="jxr_keyword">this</strong>.delayResponse;
-<a class="jxr_linenumber" name="503" href="#503">503</a>       <strong class="jxr_keyword">this</strong>.delayResponse = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="504" href="#504">504</a>       <strong class="jxr_keyword">this</strong>.delayReturnValue = delayReturnValue;
-<a class="jxr_linenumber" name="505" href="#505">505</a>       <strong class="jxr_keyword">int</strong> numDelayed = delayedCalls.incrementAndGet();
-<a class="jxr_linenumber" name="506" href="#506">506</a>       <strong class="jxr_keyword">if</strong> (numDelayed &gt; warnDelayedCalls) {
-<a class="jxr_linenumber" name="507" href="#507">507</a>         LOG.warn(<span class="jxr_string">"Too many delayed calls: limit "</span> + warnDelayedCalls + <span class="jxr_string">" current "</span> + numDelayed);
-<a class="jxr_linenumber" name="508" href="#508">508</a>       }
-<a class="jxr_linenumber" name="509" href="#509">509</a>     }
-<a class="jxr_linenumber" name="510" href="#510">510</a> 
-<a class="jxr_linenumber" name="511" href="#511">511</a>     @Override
-<a class="jxr_linenumber" name="512" href="#512">512</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> endDelayThrowing(Throwable t) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="513" href="#513">513</a>       <strong class="jxr_keyword">this</strong>.setResponse(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, t, StringUtils.stringifyException(t));
-<a class="jxr_linenumber" name="514" href="#514">514</a>       <strong class="jxr_keyword">this</strong>.delayResponse = false;
-<a class="jxr_linenumber" name="515" href="#515">515</a>       <strong class="jxr_keyword">this</strong>.sendResponseIfReady();
-<a class="jxr_linenumber" name="516" href="#516">516</a>     }
-<a class="jxr_linenumber" name="517" href="#517">517</a> 
-<a class="jxr_linenumber" name="518" href="#518">518</a>     @Override
-<a class="jxr_linenumber" name="519" href="#519">519</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">boolean</strong> isDelayed() {
-<a class="jxr_linenumber" name="520" href="#520">520</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.delayResponse;
-<a class="jxr_linenumber" name="521" href="#521">521</a>     }
-<a class="jxr_linenumber" name="522" href="#522">522</a> 
-<a class="jxr_linenumber" name="523" href="#523">523</a>     @Override
-<a class="jxr_linenumber" name="524" href="#524">524</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">boolean</strong> isReturnValueDelayed() {
-<a class="jxr_linenumber" name="525" href="#525">525</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.delayReturnValue;
-<a class="jxr_linenumber" name="526" href="#526">526</a>     }
-<a class="jxr_linenumber" name="527" href="#527">527</a> 
-<a class="jxr_linenumber" name="528" href="#528">528</a>     @Override
-<a class="jxr_linenumber" name="529" href="#529">529</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isClientCellBlockSupported() {
-<a class="jxr_linenumber" name="530" href="#530">530</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.connection != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.connection.codec != <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="531" href="#531">531</a>     }
-<a class="jxr_linenumber" name="532" href="#532">532</a> 
-<a class="jxr_linenumber" name="533" href="#533">533</a>     @Override
-<a class="jxr_linenumber" name="534" href="#534">534</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> disconnectSince() {
-<a class="jxr_linenumber" name="535" href="#535">535</a>       <strong class="jxr_keyword">if</strong> (!connection.channel.isOpen()) {
-<a class="jxr_linenumber" name="536" href="#536">536</a>         <strong class="jxr_keyword">return</strong> System.currentTimeMillis() - timestamp;
-<a class="jxr_linenumber" name="537" href="#537">537</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="538" href="#538">538</a>         <strong class="jxr_keyword">return</strong> -1L;
-<a class="jxr_linenumber" name="539" href="#539">539</a>       }
-<a class="jxr_linenumber" name="540" href="#540">540</a>     }
-<a class="jxr_linenumber" name="541" href="#541">541</a> 
-<a class="jxr_linenumber" name="542" href="#542">542</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSize() {
-<a class="jxr_linenumber" name="543" href="#543">543</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.size;
-<a class="jxr_linenumber" name="544" href="#544">544</a>     }
-<a class="jxr_linenumber" name="545" href="#545">545</a> 
-<a class="jxr_linenumber" name="546" href="#546">546</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getResponseCellSize() {
-<a class="jxr_linenumber" name="547" href="#547">547</a>       <strong class="jxr_keyword">return</strong> responseCellSize;
-<a class="jxr_linenumber" name="548" href="#548">548</a>     }
-<a class="jxr_linenumber" name="549" href="#549">549</a> 
-<a class="jxr_linenumber" name="550" href="#550">550</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> incrementResponseCellSize(<strong class="jxr_keyword">long</strong> cellSize) {
-<a class="jxr_linenumber" name="551" href="#551">551</a>       responseCellSize += cellSize;
-<a class="jxr_linenumber" name="552" href="#552">552</a>     }
-<a class="jxr_linenumber" name="553" href="#553">553</a> 
-<a class="jxr_linenumber" name="554" href="#554">554</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="555" href="#555">555</a> <em class="jxr_javadoccomment">     * If we have a response, and delay is not set, then respond</em>
-<a class="jxr_linenumber" name="556" href="#556">556</a> <em class="jxr_javadoccomment">     * immediately.  Otherwise, do not respond to client.  This is</em>
-<a class="jxr_linenumber" name="557" href="#557">557</a> <em class="jxr_javadoccomment">     * called by the RPC code in the context of the Handler thread.</em>
-<a class="jxr_linenumber" name="558" href="#558">558</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="559" href="#559">559</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> sendResponseIfReady() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="560" href="#560">560</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.delayResponse) {
-<a class="jxr_linenumber" name="561" href="#561">561</a>         <strong class="jxr_keyword">this</strong>.responder.doRespond(<strong class="jxr_keyword">this</strong>);
-<a class="jxr_linenumber" name="562" href="#562">562</a>       }
+<a class="jxr_linenumber" name="322" href="#322">322</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> responseBlockSize = 0;
+<a class="jxr_linenumber" name="323" href="#323">323</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> retryImmediatelySupported;
+<a class="jxr_linenumber" name="324" href="#324">324</a> 
+<a class="jxr_linenumber" name="325" href="#325">325</a>     <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">Call</a>(<strong class="jxr_keyword">int</strong> id, <strong class="jxr_keyword">final</strong> BlockingService service, <strong class="jxr_keyword">final</strong> MethodDescriptor md, RequestHeader header,
+<a class="jxr_linenumber" name="326" href="#326">326</a>          Message param, <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html">CellScanner</a> cellScanner, <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> connection, <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.html">Responder</a> responder,
+<a class="jxr_linenumber" name="327" href="#327">327</a>          <strong class="jxr_keyword">long</strong> size, TraceInfo tinfo, <strong class="jxr_keyword">final</strong> InetAddress remoteAddress) {
+<a class="jxr_linenumber" name="328" href="#328">328</a>       <strong class="jxr_keyword">this</strong>.id = id;
+<a class="jxr_linenumber" name="329" href="#329">329</a>       <strong class="jxr_keyword">this</strong>.service = service;
+<a class="jxr_linenumber" name="330" href="#330">330</a>       <strong class="jxr_keyword">this</strong>.md = md;
+<a class="jxr_linenumber" name="331" href="#331">331</a>       <strong class="jxr_keyword">this</strong>.header = header;
+<a class="jxr_linenumber" name="332" href="#332">332</a>       <strong class="jxr_keyword">this</strong>.param = param;
+<a class="jxr_linenumber" name="333" href="#333">333</a>       <strong class="jxr_keyword">this</strong>.cellScanner = cellScanner;
+<a class="jxr_linenumber" name="334" href="#334">334</a>       <strong class="jxr_keyword">this</strong>.connection = connection;
+<a class="jxr_linenumber" name="335" href="#335">335</a>       <strong class="jxr_keyword">this</strong>.timestamp = System.currentTimeMillis();
+<a class="jxr_linenumber" name="336" href="#336">336</a>       <strong class="jxr_keyword">this</strong>.response = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="337" href="#337">337</a>       <strong class="jxr_keyword">this</strong>.delayResponse = false;
+<a class="jxr_linenumber" name="338" href="#338">338</a>       <strong class="jxr_keyword">this</strong>.responder = responder;
+<a class="jxr_linenumber" name="339" href="#339">339</a>       <strong class="jxr_keyword">this</strong>.isError = false;
+<a class="jxr_linenumber" name="340" href="#340">340</a>       <strong class="jxr_keyword">this</strong>.size = size;
+<a class="jxr_linenumber" name="341" href="#341">341</a>       <strong class="jxr_keyword">this</strong>.tinfo = tinfo;
+<a class="jxr_linenumber" name="342" href="#342">342</a>       <strong class="jxr_keyword">this</strong>.user = connection.user;
+<a class="jxr_linenumber" name="343" href="#343">343</a>       <strong class="jxr_keyword">this</strong>.remoteAddress = remoteAddress;
+<a class="jxr_linenumber" name="344" href="#344">344</a>       <strong class="jxr_keyword">this</strong>.retryImmediatelySupported = connection.retryImmediatelySupported;
+<a class="jxr_linenumber" name="345" href="#345">345</a>     }
+<a class="jxr_linenumber" name="346" href="#346">346</a> 
+<a class="jxr_linenumber" name="347" href="#347">347</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">     * Call is done. Execution happened and we returned results to client. It is now safe to</em>
+<a class="jxr_linenumber" name="349" href="#349">349</a> <em class="jxr_javadoccomment">     * cleanup.</em>
+<a class="jxr_linenumber" name="350" href="#350">350</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="351" href="#351">351</a>     <strong class="jxr_keyword">void</strong> done() {
+<a class="jxr_linenumber" name="352" href="#352">352</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.cellBlock != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="353" href="#353">353</a>         <em class="jxr_comment">// Return buffer to reservoir now we are done with it.</em>
+<a class="jxr_linenumber" name="354" href="#354">354</a>         reservoir.putBuffer(<strong class="jxr_keyword">this</strong>.cellBlock);
+<a class="jxr_linenumber" name="355" href="#355">355</a>         <strong class="jxr_keyword">this</strong>.cellBlock = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="356" href="#356">356</a>       }
+<a class="jxr_linenumber" name="357" href="#357">357</a>       <strong class="jxr_keyword">this</strong>.connection.decRpcCount();  <em class="jxr_comment">// Say that we're done with this call.</em>
+<a class="jxr_linenumber" name="358" href="#358">358</a>     }
+<a class="jxr_linenumber" name="359" href="#359">359</a> 
+<a class="jxr_linenumber" name="360" href="#360">360</a>     @Override
+<a class="jxr_linenumber" name="361" href="#361">361</a>     <strong class="jxr_keyword">public</strong> String toString() {
+<a class="jxr_linenumber" name="362" href="#362">362</a>       <strong class="jxr_keyword">return</strong> toShortString() + <span class="jxr_string">" param: "</span> +
+<a class="jxr_linenumber" name="363" href="#363">363</a>         (<strong class="jxr_keyword">this</strong>.param != <strong class="jxr_keyword">null</strong>? ProtobufUtil.getShortTextFormat(<strong class="jxr_keyword">this</strong>.param): <span class="jxr_string">""</span>) +
+<a class="jxr_linenumber" name="364" href="#364">364</a>         <span class="jxr_string">" connection: "</span> + connection.toString();
+<a class="jxr_linenumber" name="365" href="#365">365</a>     }
+<a class="jxr_linenumber" name="366" href="#366">366</a> 
+<a class="jxr_linenumber" name="367" href="#367">367</a>     <strong class="jxr_keyword">protected</strong> RequestHeader getHeader() {
+<a class="jxr_linenumber" name="368" href="#368">368</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.header;
+<a class="jxr_linenumber" name="369" href="#369">369</a>     }
+<a class="jxr_linenumber" name="370" href="#370">370</a> 
+<a class="jxr_linenumber" name="371" href="#371">371</a>     <em class="jxr_comment">/*</em>
+<a class="jxr_linenumber" name="372" href="#372">372</a> <em class="jxr_comment">     * Short string representation without param info because param itself could be huge depends on</em>
+<a class="jxr_linenumber" name="373" href="#373">373</a> <em class="jxr_comment">     * the payload of a command</em>
+<a class="jxr_linenumber" name="374" href="#374">374</a> <em class="jxr_comment">     */</em>
+<a class="jxr_linenumber" name="375" href="#375">375</a>     String toShortString() {
+<a class="jxr_linenumber" name="376" href="#376">376</a>       String serviceName = <strong class="jxr_keyword">this</strong>.connection.service != <strong class="jxr_keyword">null</strong> ?
+<a class="jxr_linenumber" name="377" href="#377">377</a>           <strong class="jxr_keyword">this</strong>.connection.service.getDescriptorForType().getName() : <span class="jxr_string">"null"</span>;
+<a class="jxr_linenumber" name="378" href="#378">378</a>       <strong class="jxr_keyword">return</strong> <span class="jxr_string">"callId: "</span> + <strong class="jxr_keyword">this</strong>.id + <span class="jxr_string">" service: "</span> + serviceName +
+<a class="jxr_linenumber" name="379" href="#379">379</a>           <span class="jxr_string">" methodName: "</span> + ((<strong class="jxr_keyword">this</strong>.md != <strong class="jxr_keyword">null</strong>) ? <strong class="jxr_keyword">this</strong>.md.getName() : <span class="jxr_string">"n/a"</span>) +
+<a class="jxr_linenumber" name="380" href="#380">380</a>           <span class="jxr_string">" size: "</span> + StringUtils.TraditionalBinaryPrefix.<strong class="jxr_keyword">long</strong>2String(<strong class="jxr_keyword">this</strong>.size, <span class="jxr_string">""</span>, 1) +
+<a class="jxr_linenumber" name="381" href="#381">381</a>           <span class="jxr_string">" connection: "</span> + connection.toString();
+<a class="jxr_linenumber" name="382" href="#382">382</a>     }
+<a class="jxr_linenumber" name="383" href="#383">383</a> 
+<a class="jxr_linenumber" name="384" href="#384">384</a>     String toTraceString() {
+<a class="jxr_linenumber" name="385" href="#385">385</a>       String serviceName = <strong class="jxr_keyword">this</strong>.connection.service != <strong class="jxr_keyword">null</strong> ?
+<a class="jxr_linenumber" name="386" href="#386">386</a>                            <strong class="jxr_keyword">this</strong>.connection.service.getDescriptorForType().getName() : <span class="jxr_string">""</span>;
+<a class="jxr_linenumber" name="387" href="#387">387</a>       String methodName = (<strong class="jxr_keyword">this</strong>.md != <strong class="jxr_keyword">null</strong>) ? <strong class="jxr_keyword">this</strong>.md.getName() : <span class="jxr_string">""</span>;
+<a class="jxr_linenumber" name="388" href="#388">388</a>       <strong class="jxr_keyword">return</strong> serviceName + <span class="jxr_string">"."</span> + methodName;
+<a class="jxr_linenumber" name="389" href="#389">389</a>     }
+<a class="jxr_linenumber" name="390" href="#390">390</a> 
+<a class="jxr_linenumber" name="391" href="#391">391</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> setSaslTokenResponse(ByteBuffer response) {
+<a class="jxr_linenumber" name="392" href="#392">392</a>       <strong class="jxr_keyword">this</strong>.response = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a>(response);
+<a class="jxr_linenumber" name="393" href="#393">393</a>     }
+<a class="jxr_linenumber" name="394" href="#394">394</a> 
+<a class="jxr_linenumber" name="395" href="#395">395</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> setResponse(Object m, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html">CellScanner</a> cells,
+<a class="jxr_linenumber" name="396" href="#396">396</a>         Throwable t, String errorMsg) {
+<a class="jxr_linenumber" name="397" href="#397">397</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.isError) <strong class="jxr_keyword">return</strong>;
+<a class="jxr_linenumber" name="398" href="#398">398</a>       <strong class="jxr_keyword">if</strong> (t != <strong class="jxr_keyword">null</strong>) <strong class="jxr_keyword">this</strong>.isError = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="399" href="#399">399</a>       <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a> bc = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="400" href="#400">400</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="401" href="#401">401</a>         ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();
+<a class="jxr_linenumber" name="402" href="#402">402</a>         <em class="jxr_comment">// Presume it a pb Message.  Could be null.</em>
+<a class="jxr_linenumber" name="403" href="#403">403</a>         Message result = (Message)m;
+<a class="jxr_linenumber" name="404" href="#404">404</a>         <em class="jxr_comment">// Call id.</em>
+<a class="jxr_linenumber" name="405" href="#405">405</a>         headerBuilder.setCallId(<strong class="jxr_keyword">this</strong>.id);
+<a class="jxr_linenumber" name="406" href="#406">406</a>         <strong class="jxr_keyword">if</strong> (t != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="407" href="#407">407</a>           ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();
+<a class="jxr_linenumber" name="408" href="#408">408</a>           exceptionBuilder.setExceptionClassName(t.getClass().getName());
+<a class="jxr_linenumber" name="409" href="#409">409</a>           exceptionBuilder.setStackTrace(errorMsg);
+<a class="jxr_linenumber" name="410" href="#410">410</a>           exceptionBuilder.setDoNotRetry(t instanceof <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html">DoNotRetryIOException</a>);
+<a class="jxr_linenumber" name="411" href="#411">411</a>           <strong class="jxr_keyword">if</strong> (t instanceof RegionMovedException) {
+<a class="jxr_linenumber" name="412" href="#412">412</a>             <em class="jxr_comment">// Special casing for this exception.  This is only one carrying a payload.</em>
+<a class="jxr_linenumber" name="413" href="#413">413</a>             <em class="jxr_comment">// Do this instead of build a generic system for allowing exceptions carry</em>
+<a class="jxr_linenumber" name="414" href="#414">414</a>             <em class="jxr_comment">// any kind of payload.</em>
+<a class="jxr_linenumber" name="415" href="#415">415</a>             <a href="../../../../../org/apache/hadoop/hbase/exceptions/RegionMovedException.html">RegionMovedException</a> rme = (RegionMovedException)t;
+<a class="jxr_linenumber" name="416" href="#416">416</a>             exceptionBuilder.setHostname(rme.getHostname());
+<a class="jxr_linenumber" name="417" href="#417">417</a>             exceptionBuilder.setPort(rme.getPort());
+<a class="jxr_linenumber" name="418" href="#418">418</a>           }
+<a class="jxr_linenumber" name="419" href="#419">419</a>           <em class="jxr_comment">// Set the exception as the result of the method invocation.</em>
+<a class="jxr_linenumber" name="420" href="#420">420</a>           headerBuilder.setException(exceptionBuilder.build());
+<a class="jxr_linenumber" name="421" href="#421">421</a>         }
+<a class="jxr_linenumber" name="422" href="#422">422</a>         <em class="jxr_comment">// Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the</em>
+<a class="jxr_linenumber" name="423" href="#423">423</a>         <em class="jxr_comment">// reservoir when finished. This is hacky and the hack is not contained but benefits are</em>
+<a class="jxr_linenumber" name="424" href="#424">424</a>         <em class="jxr_comment">// high when we can avoid a big buffer allocation on each rpc.</em>
+<a class="jxr_linenumber" name="425" href="#425">425</a>         <strong class="jxr_keyword">this</strong>.cellBlock = ipcUtil.buildCellBlock(<strong class="jxr_keyword">this</strong>.connection.codec,
+<a class="jxr_linenumber" name="426" href="#426">426</a>           <strong class="jxr_keyword">this</strong>.connection.compressionCodec, cells, reservoir);
+<a class="jxr_linenumber" name="427" href="#427">427</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.cellBlock != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="428" href="#428">428</a>           CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();
+<a class="jxr_linenumber" name="429" href="#429">429</a>           <em class="jxr_comment">// Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.</em>
+<a class="jxr_linenumber" name="430" href="#430">430</a>           cellBlockBuilder.setLength(<strong class="jxr_keyword">this</strong>.cellBlock.limit());
+<a class="jxr_linenumber" name="431" href="#431">431</a>           headerBuilder.setCellBlockMeta(cellBlockBuilder.build());
+<a class="jxr_linenumber" name="432" href="#432">432</a>         }
+<a class="jxr_linenumber" name="433" href="#433">433</a>         Message header = headerBuilder.build();
+<a class="jxr_linenumber" name="434" href="#434">434</a> 
+<a class="jxr_linenumber" name="435" href="#435">435</a>         <em class="jxr_comment">// Organize the response as a set of bytebuffers rather than collect it all together inside</em>
+<a class="jxr_linenumber" name="436" href="#436">436</a>         <em class="jxr_comment">// one big byte array; save on allocations.</em>
+<a class="jxr_linenumber" name="437" href="#437">437</a>         ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);
+<a class="jxr_linenumber" name="438" href="#438">438</a>         ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);
+<a class="jxr_linenumber" name="439" href="#439">439</a>         <strong class="jxr_keyword">int</strong> totalSize = bbHeader.capacity() + (bbResult == <strong class="jxr_keyword">null</strong>? 0: bbResult.limit()) +
+<a class="jxr_linenumber" name="440" href="#440">440</a>           (<strong class="jxr_keyword">this</strong>.cellBlock == <strong class="jxr_keyword">null</strong>? 0: <strong class="jxr_keyword">this</strong>.cellBlock.limit());
+<a class="jxr_linenumber" name="441" href="#441">441</a>         ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));
+<a class="jxr_linenumber" name="442" href="#442">442</a>         bc = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a>(bbTotalSize, bbHeader, bbResult, <strong class="jxr_keyword">this</strong>.cellBlock);
+<a class="jxr_linenumber" name="443" href="#443">443</a>         <strong class="jxr_keyword">if</strong> (connection.useWrap) {
+<a class="jxr_linenumber" name="444" href="#444">444</a>           bc = wrapWithSasl(bc);
+<a class="jxr_linenumber" name="445" href="#445">445</a>         }
+<a class="jxr_linenumber" name="446" href="#446">446</a>       } <strong class="jxr_keyword">catch</strong> (IOException e) {
+<a class="jxr_linenumber" name="447" href="#447">447</a>         LOG.warn(<span class="jxr_string">"Exception while creating response "</span> + e);
+<a class="jxr_linenumber" name="448" href="#448">448</a>       }
+<a class="jxr_linenumber" name="449" href="#449">449</a>       <strong class="jxr_keyword">this</strong>.response = bc;
+<a class="jxr_linenumber" name="450" href="#450">450</a>       <em class="jxr_comment">// Once a response message is created and set to this.response, this Call can be treated as</em>
+<a class="jxr_linenumber" name="451" href="#451">451</a>       <em class="jxr_comment">// done. The Responder thread will do the n/w write of this message back to client.</em>
+<a class="jxr_linenumber" name="452" href="#452">452</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.callback != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="453" href="#453">453</a>         <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="454" href="#454">454</a>           <strong class="jxr_keyword">this</strong>.callback.run();
+<a class="jxr_linenumber" name="455" href="#455">455</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
+<a class="jxr_linenumber" name="456" href="#456">456</a>           <em class="jxr_comment">// Don't allow any exception here to kill this handler thread.</em>
+<a class="jxr_linenumber" name="457" href="#457">457</a>           LOG.warn(<span class="jxr_string">"Exception while running the Rpc Callback."</span>, e);
+<a class="jxr_linenumber" name="458" href="#458">458</a>         }
+<a class="jxr_linenumber" name="459" href="#459">459</a>       }
+<a class="jxr_linenumber" name="460" href="#460">460</a>     }
+<a class="jxr_linenumber" name="461" href="#461">461</a> 
+<a class="jxr_linenumber" name="462" href="#462">462</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a> wrapWithSasl(<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a> bc)
+<a class="jxr_linenumber" name="463" href="#463">463</a>         <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="464" href="#464">464</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.connection.useSasl) <strong class="jxr_keyword">return</strong> bc;
+<a class="jxr_linenumber" name="465" href="#465">465</a>       <em class="jxr_comment">// Looks like no way around this; saslserver wants a byte array.  I have to make it one.</em>
+<a class="jxr_linenumber" name="466" href="#466">466</a>       <em class="jxr_comment">// THIS IS A BIG UGLY COPY.</em>
+<a class="jxr_linenumber" name="467" href="#467">467</a>       byte [] responseBytes = bc.getBytes();
+<a class="jxr_linenumber" name="468" href="#468">468</a>       byte [] token;
+<a class="jxr_linenumber" name="469" href="#469">469</a>       <em class="jxr_comment">// synchronization may be needed since there can be multiple Handler</em>
+<a class="jxr_linenumber" name="470" href="#470">470</a>       <em class="jxr_comment">// threads using saslServer to wrap responses.</em>
+<a class="jxr_linenumber" name="471" href="#471">471</a>       <strong class="jxr_keyword">synchronized</strong> (connection.saslServer) {
+<a class="jxr_linenumber" name="472" href="#472">472</a>         token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);
+<a class="jxr_linenumber" name="473" href="#473">473</a>       }
+<a class="jxr_linenumber" name="474" href="#474">474</a>       <strong class="jxr_keyword">if</strong> (LOG.isTraceEnabled()) {
+<a class="jxr_linenumber" name="475" href="#475">475</a>         LOG.trace(<span class="jxr_string">"Adding saslServer wrapped token of size "</span> + token.length
+<a class="jxr_linenumber" name="476" href="#476">476</a>             + <span class="jxr_string">" as call response."</span>);
+<a class="jxr_linenumber" name="477" href="#477">477</a>       }
+<a class="jxr_linenumber" name="478" href="#478">478</a> 
+<a class="jxr_linenumber" name="479" href="#479">479</a>       ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));
+<a class="jxr_linenumber" name="480" href="#480">480</a>       ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);
+<a class="jxr_linenumber" name="481" href="#481">481</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html">BufferChain</a>(bbTokenLength, bbTokenBytes);
+<a class="jxr_linenumber" name="482" href="#482">482</a>     }
+<a class="jxr_linenumber" name="483" href="#483">483</a> 
+<a class="jxr_linenumber" name="484" href="#484">484</a>     @Override
+<a class="jxr_linenumber" name="485" href="#485">485</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> endDelay(Object result) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="486" href="#486">486</a>       assert <strong class="jxr_keyword">this</strong>.delayResponse;
+<a class="jxr_linenumber" name="487" href="#487">487</a>       assert <strong class="jxr_keyword">this</strong>.delayReturnValue || result == <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="488" href="#488">488</a>       <strong class="jxr_keyword">this</strong>.delayResponse = false;
+<a class="jxr_linenumber" name="489" href="#489">489</a>       delayedCalls.decrementAndGet();
+<a class="jxr_linenumber" name="490" href="#490">490</a>       <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.delayReturnValue) {
+<a class="jxr_linenumber" name="491" href="#491">491</a>         <strong class="jxr_keyword">this</strong>.setResponse(result, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="492" href="#492">492</a>       }
+<a class="jxr_linenumber" name="493" href="#493">493</a>       <strong class="jxr_keyword">this</strong>.responder.doRespond(<strong class="jxr_keyword">this</strong>);
+<a class="jxr_linenumber" name="494" href="#494">494</a>     }
+<a class="jxr_linenumber" name="495" href="#495">495</a> 
+<a class="jxr_linenumber" name="496" href="#496">496</a>     @Override
+<a class="jxr_linenumber" name="497" href="#497">497</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> endDelay() <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="498" href="#498">498</a>       <strong class="jxr_keyword">this</strong>.endDelay(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="499" href="#499">499</a>     }
+<a class="jxr_linenumber" name="500" href="#500">500</a> 
+<a class="jxr_linenumber" name="501" href="#501">501</a>     @Override
+<a class="jxr_linenumber" name="502" href="#502">502</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> startDelay(<strong class="jxr_keyword">boolean</strong> delayReturnValue) {
+<a class="jxr_linenumber" name="503" href="#503">503</a>       assert !<strong class="jxr_keyword">this</strong>.delayResponse;
+<a class="jxr_linenumber" name="504" href="#504">504</a>       <strong class="jxr_keyword">this</strong>.delayResponse = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="505" href="#505">505</a>       <strong class="jxr_keyword">this</strong>.delayReturnValue = delayReturnValue;
+<a class="jxr_linenumber" name="506" href="#506">506</a>       <strong class="jxr_keyword">int</strong> numDelayed = delayedCalls.incrementAndGet();
+<a class="jxr_linenumber" name="507" href="#507">507</a>       <strong class="jxr_keyword">if</strong> (numDelayed &gt; warnDelayedCalls) {
+<a class="jxr_linenumber" name="508" href="#508">508</a>         LOG.warn(<span class="jxr_string">"Too many delayed calls: limit "</span> + warnDelayedCalls + <span class="jxr_string">" current "</span> + numDelayed);
+<a class="jxr_linenumber" name="509" href="#509">509</a>       }
+<a class="jxr_linenumber" name="510" href="#510">510</a>     }
+<a class="jxr_linenumber" name="511" href="#511">511</a> 
+<a class="jxr_linenumber" name="512" href="#512">512</a>     @Override
+<a class="jxr_linenumber" name="513" href="#513">513</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> endDelayThrowing(Throwable t) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="514" href="#514">514</a>       <strong class="jxr_keyword">this</strong>.setResponse(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, t, StringUtils.stringifyException(t));
+<a class="jxr_linenumber" name="515" href="#515">515</a>       <strong class="jxr_keyword">this</strong>.delayResponse = false;
+<a class="jxr_linenumber" name="516" href="#516">516</a>       <strong class="jxr_keyword">this</strong>.sendResponseIfReady();
+<a class="jxr_linenumber" name="517" href="#517">517</a>     }
+<a class="jxr_linenumber" name="518" href="#518">518</a> 
+<a class="jxr_linenumber" name="519" href="#519">519</a>     @Override
+<a class="jxr_linenumber" name="520" href="#520">520</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">boolean</strong> isDelayed() {
+<a class="jxr_linenumber" name="521" href="#521">521</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.delayResponse;
+<a class="jxr_linenumber" name="522" href="#522">522</a>     }
+<a class="jxr_linenumber" name="523" href="#523">523</a> 
+<a class="jxr_linenumber" name="524" href="#524">524</a>     @Override
+<a class="jxr_linenumber" name="525" href="#525">525</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">boolean</strong> isReturnValueDelayed() {
+<a class="jxr_linenumber" name="526" href="#526">526</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.delayReturnValue;
+<a class="jxr_linenumber" name="527" href="#527">527</a>     }
+<a class="jxr_linenumber" name="528" href="#528">528</a> 
+<a class="jxr_linenumber" name="529" href="#529">529</a>     @Override
+<a class="jxr_linenumber" name="530" href="#530">530</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isClientCellBlockSupported() {
+<a class="jxr_linenumber" name="531" href="#531">531</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.connection != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.connection.codec != <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="532" href="#532">532</a>     }
+<a class="jxr_linenumber" name="533" href="#533">533</a> 
+<a class="jxr_linenumber" name="534" href="#534">534</a>     @Override
+<a class="jxr_linenumber" name="535" href="#535">535</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> disconnectSince() {
+<a class="jxr_linenumber" name="536" href="#536">536</a>       <strong class="jxr_keyword">if</strong> (!connection.channel.isOpen()) {
+<a class="jxr_linenumber" name="537" href="#537">537</a>         <strong class="jxr_keyword">return</strong> System.currentTimeMillis() - timestamp;
+<a class="jxr_linenumber" name="538" href="#538">538</a>       } <strong class="jxr_keyword">else</strong> {
+<a class="jxr_linenumber" name="539" href="#539">539</a>         <strong class="jxr_keyword">return</strong> -1L;
+<a class="jxr_linenumber" name="540" href="#540">540</a>       }
+<a class="jxr_linenumber" name="541" href="#541">541</a>     }
+<a class="jxr_linenumber" name="542" href="#542">542</a> 
+<a class="jxr_linenumber" name="543" href="#543">543</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getSize() {
+<a class="jxr_linenumber" name="544" href="#544">544</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.size;
+<a class="jxr_linenumber" name="545" href="#545">545</a>     }
+<a class="jxr_linenumber" name="546" href="#546">546</a> 
+<a class="jxr_linenumber" name="547" href="#547">547</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getResponseCellSize() {
+<a class="jxr_linenumber" name="548" href="#548">548</a>       <strong class="jxr_keyword">return</strong> responseCellSize;
+<a class="jxr_linenumber" name="549" href="#549">549</a>     }
+<a class="jxr_linenumber" name="550" href="#550">550</a> 
+<a class="jxr_linenumber" name="551" href="#551">551</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> incrementResponseCellSize(<strong class="jxr_keyword">long</strong> cellSize) {
+<a class="jxr_linenumber" name="552" href="#552">552</a>       responseCellSize += cellSize;
+<a class="jxr_linenumber" name="553" href="#553">553</a>     }
+<a class="jxr_linenumber" name="554" href="#554">554</a> 
+<a class="jxr_linenumber" name="555" href="#555">555</a>     @Override
+<a class="jxr_linenumber" name="556" href="#556">556</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">long</strong> getResponseBlockSize() {
+<a class="jxr_linenumber" name="557" href="#557">557</a>       <strong class="jxr_keyword">return</strong> responseBlockSize;
+<a class="jxr_linenumber" name="558" href="#558">558</a>     }
+<a class="jxr_linenumber" name="559" href="#559">559</a> 
+<a class="jxr_linenumber" name="560" href="#560">560</a>     @Override
+<a class="jxr_linenumber" name="561" href="#561">561</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> incrementResponseBlockSize(<strong class="jxr_keyword">long</strong> blockSize) {
+<a class="jxr_linenumber" name="562" href="#562">562</a>       responseBlockSize += blockSize;
 <a class="jxr_linenumber" name="563" href="#563">563</a>     }
 <a class="jxr_linenumber" name="564" href="#564">564</a> 
-<a class="jxr_linenumber" name="565" href="#565">565</a>     <strong class="jxr_keyword">public</strong> UserGroupInformation getRemoteUser() {
-<a class="jxr_linenumber" name="566" href="#566">566</a>       <strong class="jxr_keyword">return</strong> connection.ugi;
-<a class="jxr_linenumber" name="567" href="#567">567</a>     }
-<a class="jxr_linenumber" name="568" href="#568">568</a> 
-<a class="jxr_linenumber" name="569" href="#569">569</a>     @Override
-<a class="jxr_linenumber" name="570" href="#570">570</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> getRequestUser() {
-<a class="jxr_linenumber" name="571" href="#571">571</a>       <strong class="jxr_keyword">return</strong> user;
-<a class="jxr_linenumber" name="572" href="#572">572</a>     }
-<a class="jxr_linenumber" name="573" href="#573">573</a> 
-<a class="jxr_linenumber" name="574" href="#574">574</a>     @Override
-<a class="jxr_linenumber" name="575" href="#575">575</a>     <strong class="jxr_keyword">public</strong> String getRequestUserName() {
-<a class="jxr_linenumber" name="576" href="#576">576</a>       <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user = getRequestUser();
-<a class="jxr_linenumber" name="577" href="#577">577</a>       <strong class="jxr_keyword">return</strong> user == <strong class="jxr_keyword">null</strong>? <strong class="jxr_keyword">null</strong>: user.getShortName();
+<a class="jxr_linenumber" name="565" href="#565">565</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="566" href="#566">566</a> <em class="jxr_javadoccomment">     * If we have a response, and delay is not set, then respond</em>
+<a class="jxr_linenumber" name="567" href="#567">567</a> <em class="jxr_javadoccomment">     * immediately.  Otherwise, do not respond to client.  This is</em>
+<a class="jxr_linenumber" name="568" href="#568">568</a> <em class="jxr_javadoccomment">     * called by the RPC code in the context of the Handler thread.</em>
+<a class="jxr_linenumber" name="569" href="#569">569</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="570" href="#570">570</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">synchronized</strong> <strong class="jxr_keyword">void</strong> sendResponseIfReady() <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="571" href="#571">571</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.delayResponse) {
+<a class="jxr_linenumber" name="572" href="#572">572</a>         <strong class="jxr_keyword">this</strong>.responder.doRespond(<strong class="jxr_keyword">this</strong>);
+<a class="jxr_linenumber" name="573" href="#573">573</a>       }
+<a class="jxr_linenumber" name="574" href="#574">574</a>     }
+<a class="jxr_linenumber" name="575" href="#575">575</a> 
+<a class="jxr_linenumber" name="576" href="#576">576</a>     <strong class="jxr_keyword">public</strong> UserGroupInformation getRemoteUser() {
+<a class="jxr_linenumber" name="577" href="#577">577</a>       <strong class="jxr_keyword">return</strong> connection.ugi;
 <a class="jxr_linenumber" name="578" href="#578">578</a>     }
 <a class="jxr_linenumber" name="579" href="#579">579</a> 
 <a class="jxr_linenumber" name="580" href="#580">580</a>     @Override
-<a class="jxr_linenumber" name="581" href="#581">581</a>     <strong class="jxr_keyword">public</strong> InetAddress getRemoteAddress() {
-<a class="jxr_linenumber" name="582" href="#582">582</a>       <strong class="jxr_keyword">return</strong> remoteAddress;
+<a class="jxr_linenumber" name="581" href="#581">581</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> getRequestUser() {
+<a class="jxr_linenumber" name="582" href="#582">582</a>       <strong class="jxr_keyword">return</strong> user;
 <a class="jxr_linenumber" name="583" href="#583">583</a>     }
 <a class="jxr_linenumber" name="584" href="#584">584</a> 
 <a class="jxr_linenumber" name="585" href="#585">585</a>     @Override
-<a class="jxr_linenumber" name="586" href="#586">586</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/util/VersionInfo.html">VersionInfo</a> getClientVersionInfo() {
-<a class="jxr_linenumber" name="587" href="#587">587</a>       <strong class="jxr_keyword">return</strong> connection.getVersionInfo();
-<a class="jxr_linenumber" name="588" href="#588">588</a>     }
-<a class="jxr_linenumber" name="589" href="#589">589</a> 
-<a class="jxr_linenumber" name="590" href="#590">590</a>     @Override
-<a class="jxr_linenumber" name="591" href="#591">591</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setCallBack(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> callback) {
-<a class="jxr_linenumber" name="592" href="#592">592</a>       <strong class="jxr_keyword">this</strong>.callback = callback;
-<a class="jxr_linenumber" name="593" href="#593">593</a>     }
-<a class="jxr_linenumber" name="594" href="#594">594</a> 
-<a class="jxr_linenumber" name="595" href="#595">595</a>     @Override
-<a class="jxr_linenumber" name="596" href="#596">596</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isRetryImmediatelySupported() {
-<a class="jxr_linenumber" name="597" href="#597">597</a>       <strong class="jxr_keyword">return</strong> retryImmediatelySupported;
-<a class="jxr_linenumber" name="598" href="#598">598</a>     }
-<a class="jxr_linenumber" name="599" href="#599">599</a>   }
+<a class="jxr_linenumber" name="586" href="#586">586</a>     <strong class="jxr_keyword">public</strong> String getRequestUserName() {
+<a class="jxr_linenumber" name="587" href="#587">587</a>       <a href="../../../../../org/apache/hadoop/hbase/security/User.html">User</a> user = getRequestUser();
+<a class="jxr_linenumber" name="588" href="#588">588</a>       <strong class="jxr_keyword">return</strong> user == <strong class="jxr_keyword">null</strong>? <strong class="jxr_keyword">null</strong>: user.getShortName();
+<a class="jxr_linenumber" name="589" href="#589">589</a>     }
+<a class="jxr_linenumber" name="590" href="#590">590</a> 
+<a class="jxr_linenumber" name="591" href="#591">591</a>     @Override
+<a class="jxr_linenumber" name="592" href="#592">592</a>     <strong class="jxr_keyword">public</strong> InetAddress getRemoteAddress() {
+<a class="jxr_linenumber" name="593" href="#593">593</a>       <strong class="jxr_keyword">return</strong> remoteAddress;
+<a class="jxr_linenumber" name="594" href="#594">594</a>     }
+<a class="jxr_linenumber" name="595" href="#595">595</a> 
+<a class="jxr_linenumber" name="596" href="#596">596</a>     @Override
+<a class="jxr_linenumber" name="597" href="#597">597</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/util/VersionInfo.html">VersionInfo</a> getClientVersionInfo() {
+<a class="jxr_linenumber" name="598" href="#598">598</a>       <strong class="jxr_keyword">return</strong> connection.getVersionInfo();
+<a class="jxr_linenumber" name="599" href="#599">599</a>     }
 <a class="jxr_linenumber" name="600" href="#600">600</a> 
-<a class="jxr_linenumber" name="601" href="#601">601</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Listens on the socket. Creates jobs for the handler threads*/</em>
-<a class="jxr_linenumber" name="602" href="#602">602</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/ClusterStatusListener.html">Listener</a> <strong class="jxr_keyword">extends</strong> Thread {
-<a class="jxr_linenumber" name="603" href="#603">603</a> 
-<a class="jxr_linenumber" name="604" href="#604">604</a>     <strong class="jxr_keyword">private</strong> ServerSocketChannel acceptChannel = <strong class="jxr_keyword">null</strong>; <em class="jxr_comment">//the accept channel</em>
-<a class="jxr_linenumber" name="605" href="#605">605</a>     <strong class="jxr_keyword">private</strong> Selector selector = <strong class="jxr_keyword">null</strong>; <em class="jxr_comment">//the selector that we use for the server</em>
-<a class="jxr_linenumber" name="606" href="#606">606</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">Reader</a>[] readers = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="607" href="#607">607</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> currentReader = 0;
-<a class="jxr_linenumber" name="608" href="#608">608</a>     <strong class="jxr_keyword">private</strong> Random rand = <strong class="jxr_keyword">new</strong> Random();
-<a class="jxr_linenumber" name="609" href="#609">609</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> lastCleanupRunTime = 0; <em class="jxr_comment">//the last time when a cleanup connec-</em>
-<a class="jxr_linenumber" name="610" href="#610">610</a>                                          <em class="jxr_comment">//-tion (for idle connections) ran</em>
-<a class="jxr_linenumber" name="611" href="#611">611</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> cleanupInterval = 10000; <em class="jxr_comment">//the minimum interval between</em>
-<a class="jxr_linenumber" name="612" href="#612">612</a>                                           <em class="jxr_comment">//two cleanup runs</em>
-<a class="jxr_linenumber" name="613" href="#613">613</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> backlogLength;
+<a class="jxr_linenumber" name="601" href="#601">601</a>     @Override
+<a class="jxr_linenumber" name="602" href="#602">602</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setCallBack(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> callback) {
+<a class="jxr_linenumber" name="603" href="#603">603</a>       <strong class="jxr_keyword">this</strong>.callback = callback;
+<a class="jxr_linenumber" name="604" href="#604">604</a>     }
+<a class="jxr_linenumber" name="605" href="#605">605</a> 
+<a class="jxr_linenumber" name="606" href="#606">606</a>     @Override
+<a class="jxr_linenumber" name="607" href="#607">607</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isRetryImmediatelySupported() {
+<a class="jxr_linenumber" name="608" href="#608">608</a>       <strong class="jxr_keyword">return</strong> retryImmediatelySupported;
+<a class="jxr_linenumber" name="609" href="#609">609</a>     }
+<a class="jxr_linenumber" name="610" href="#610">610</a>   }
+<a class="jxr_linenumber" name="611" href="#611">611</a> 
+<a class="jxr_linenumber" name="612" href="#612">612</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> Listens on the socket. Creates jobs for the handler threads*/</em>
+<a class="jxr_linenumber" name="613" href="#613">613</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/ClusterStatusListener.html">Listener</a> <strong class="jxr_keyword">extends</strong> Thread {
 <a class="jxr_linenumber" name="614" href="#614">614</a> 
-<a class="jxr_linenumber" name="615" href="#615">615</a>     <strong class="jxr_keyword">private</strong> ExecutorService readPool;
-<a class="jxr_linenumber" name="616" href="#616">616</a> 
-<a class="jxr_linenumber" name="617" href="#617">617</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/ClusterStatusListener.html">Listener</a>(<strong class="jxr_keyword">final</strong> String name) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="618" href="#618">618</a>       <strong class="jxr_keyword">super</strong>(name);
-<a class="jxr_linenumber" name="619" href="#619">619</a>       backlogLength = conf.getInt(<span class="jxr_string">"hbase.ipc.server.listen.queue.size"</span>, 128);
-<a class="jxr_linenumber" name="620" href="#620">620</a>       <em class="jxr_comment">// Create a new server socket and set to non blocking mode</em>
-<a class="jxr_linenumber" name="621" href="#621">621</a>       acceptChannel = ServerSocketChannel.open();
-<a class="jxr_linenumber" name="622" href="#622">622</a>       acceptChannel.configureBlocking(false);
-<a class="jxr_linenumber" name="623" href="#623">623</a> 
-<a class="jxr_linenumber" name="624" href="#624">624</a>       <em class="jxr_comment">// Bind the server socket to the binding addrees (can be different from the default interface)</em>
-<a class="jxr_linenumber" name="625" href="#625">625</a>       bind(acceptChannel.socket(), bindAddress, backlogLength);
-<a class="jxr_linenumber" name="626" href="#626">626</a>       port = acceptChannel.socket().getLocalPort(); <em class="jxr_comment">//Could be an ephemeral port</em>
-<a class="jxr_linenumber" name="627" href="#627">627</a>       address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();
-<a class="jxr_linenumber" name="628" href="#628">628</a>       <em class="jxr_comment">// create a selector;</em>
-<a class="jxr_linenumber" name="629" href="#629">629</a>       selector= Selector.open();
-<a class="jxr_linenumber" name="630" href="#630">630</a> 
-<a class="jxr_linenumber" name="631" href="#631">631</a>       readers = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">Reader</a>[readThreads];
-<a class="jxr_linenumber" name="632" href="#632">632</a>       readPool = Executors.newFixedThreadPool(readThreads,
-<a class="jxr_linenumber" name="633" href="#633">633</a>         <strong class="jxr_keyword">new</strong> ThreadFactoryBuilder().setNameFormat(
-<a class="jxr_linenumber" name="634" href="#634">634</a>           <span class="jxr_string">"RpcServer.reader=%d,bindAddress="</span> + bindAddress.getHostName() +
-<a class="jxr_linenumber" name="635" href="#635">635</a>           <span class="jxr_string">",port="</span> + port).setDaemon(<strong class="jxr_keyword">true</strong>).build());
-<a class="jxr_linenumber" name="636" href="#636">636</a>       <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; readThreads; ++i) {
-<a class="jxr_linenumber" name="637" href="#637">637</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">Reader</a> reader = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">Reader</a>();
-<a class="jxr_linenumber" name="638" href="#638">638</a>         readers[i] = reader;
-<a class="jxr_linenumber" name="639" href="#639">639</a>         readPool.execute(reader);
-<a class="jxr_linenumber" name="640" href="#640">640</a>       }
-<a class="jxr_linenumber" name="641" href="#641">641</a>       LOG.info(getName() + <span class="jxr_string">": started "</span> + readThreads + <span class="jxr_string">" reader(s) listening on port="</span> + port);
-<a class="jxr_linenumber" name="642" href="#642">642</a> 
-<a class="jxr_linenumber" name="643" href="#643">643</a>       <em class="jxr_comment">// Register accepts on the server socket with the selector.</em>
-<a class="jxr_linenumber" name="644" href="#644">644</a>       acceptChannel.register(selector, SelectionKey.OP_ACCEPT);
-<a class="jxr_linenumber" name="645" href="#645">645</a>       <strong class="jxr_keyword">this</strong>.setName(<span class="jxr_string">"RpcServer.listener,port="</span> + port);
-<a class="jxr_linenumber" name="646" href="#646">646</a>       <strong class="jxr_keyword">this</strong>.setDaemon(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="647" href="#647">647</a>     }
-<a class="jxr_linenumber" name="648" href="#648">648</a> 
-<a class="jxr_linenumber" name="649" href="#649">649</a> 
-<a class="jxr_linenumber" name="650" href="#650">650</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">Reader</a> <strong class="jxr_keyword">implements</strong> Runnable {
-<a class="jxr_linenumber" name="651" href="#651">651</a>       <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">volatile</strong> <strong class="jxr_keyword">boolean</strong> adding = false;
-<a class="jxr_linenumber" name="652" href="#652">652</a>       <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Selector readSelector;
+<a class="jxr_linenumber" name="615" href="#615">615</a>     <strong class="jxr_keyword">private</strong> ServerSocketChannel acceptChannel = <strong class="jxr_keyword">null</strong>; <em class="jxr_comment">//the accept channel</em>
+<a class="jxr_linenumber" name="616" href="#616">616</a>     <strong class="jxr_keyword">private</strong> Selector selector = <strong class="jxr_keyword">null</strong>; <em class="jxr_comment">//the selector that we use for the server</em>
+<a class="jxr_linenumber" name="617" href="#617">617</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">Reader</a>[] readers = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="618" href="#618">618</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> currentReader = 0;
+<a class="jxr_linenumber" name="619" href="#619">619</a>     <strong class="jxr_keyword">private</strong> Random rand = <strong class="jxr_keyword">new</strong> Random();
+<a class="jxr_linenumber" name="620" href="#620">620</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> lastCleanupRunTime = 0; <em class="jxr_comment">//the last time when a cleanup connec-</em>
+<a class="jxr_linenumber" name="621" href="#621">621</a>                                          <em class="jxr_comment">//-tion (for idle connections) ran</em>
+<a class="jxr_linenumber" name="622" href="#622">622</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> cleanupInterval = 10000; <em class="jxr_comment">//the minimum interval between</em>
+<a class="jxr_linenumber" name="623" href="#623">623</a>                                           <em class="jxr_comment">//two cleanup runs</em>
+<a class="jxr_linenumber" name="624" href="#624">624</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">int</strong> backlogLength;
+<a class="jxr_linenumber" name="625" href="#625">625</a> 
+<a class="jxr_linenumber" name="626" href="#626">626</a>     <strong class="jxr_keyword">private</strong> ExecutorService readPool;
+<a class="jxr_linenumber" name="627" href="#627">627</a> 
+<a class="jxr_linenumber" name="628" href="#628">628</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/client/ClusterStatusListener.html">Listener</a>(<strong class="jxr_keyword">final</strong> String name) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="629" href="#629">629</a>       <strong class="jxr_keyword">super</strong>(name);
+<a class="jxr_linenumber" name="630" href="#630">630</a>       backlogLength = conf.getInt(<span class="jxr_string">"hbase.ipc.server.listen.queue.size"</span>, 128);
+<a class="jxr_linenumber" name="631" href="#631">631</a>       <em class="jxr_comment">// Create a new server socket and set to non blocking mode</em>
+<a class="jxr_linenumber" name="632" href="#632">632</a>       acceptChannel = ServerSocketChannel.open();
+<a class="jxr_linenumber" name="633" href="#633">633</a>       acceptChannel.configureBlocking(false);
+<a class="jxr_linenumber" name="634" href="#634">634</a> 
+<a class="jxr_linenumber" name="635" href="#635">635</a>       <em class="jxr_comment">// Bind the server socket to the binding addrees (can be different from the default interface)</em>
+<a class="jxr_linenumber" name="636" href="#636">636</a>       bind(acceptChannel.socket(), bindAddress, backlogLength);
+<a class="jxr_linenumber" name="637" href="#637">637</a>       port = acceptChannel.socket().getLocalPort(); <em class="jxr_comment">//Could be an ephemeral port</em>
+<a class="jxr_linenumber" name="638" href="#638">638</a>       address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();
+<a class="jxr_linenumber" name="639" href="#639">639</a>       <em class="jxr_comment">// create a selector;</em>
+<a class="jxr_linenumber" name="640" href="#640">640</a>       selector= Selector.open();
+<a class="jxr_linenumber" name="641" href="#641">641</a> 
+<a class="jxr_linenumber" name="642" href="#642">642</a>       readers = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html">Reader</a>[readThreads];
+<a class="jxr_linenumber" name="643" href="#643">643</a>       readPool = Executors.newFixedThreadPool(readThreads,
+<a class="jxr_linenumber" name="644" href="#644">644</a>         <strong class="jxr_keyword">new</strong> ThreadFactoryBuilder().setNameFormat(
+<a class="jxr_linenumber" name="645" href="#645">645</a>           <span class="jxr_string">"RpcServer.reader=%d,bindAddress="</span> + bindAddress.getHostName() +
+<a class="jxr_linenumber" name="646" href="#646">646</a>           <span class="jxr_string">",port="</span> + port).setDaemon(<strong class="jxr_keyword">true</strong>).build());
+<a class="jxr_linenumber" name="647" href="#647">647</a>       <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; readThreads; ++i) {
+<a class="jxr_linenumber" name="648" href="#648">648</a>         <a href="../../../.

<TRUNCATED>

[11/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
index b90f5dc..5fb70d8 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
@@ -54,1492 +54,1772 @@
 <span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.io.hfile.TestHFile;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.master.AssignmentManager;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.TableLockManager;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueues;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.AfterClass;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Assert;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.Before;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.junit.BeforeClass;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.Test;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.experimental.categories.Category;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>import java.io.IOException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import java.util.ArrayList;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import java.util.LinkedList;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import java.util.List;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import java.util.concurrent.Callable;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import java.util.concurrent.CountDownLatch;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import java.util.concurrent.ExecutorService;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import java.util.concurrent.Executors;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import java.util.concurrent.Future;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import java.util.concurrent.SynchronousQueue;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import java.util.concurrent.TimeUnit;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.*;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import static org.junit.Assert.*;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>@Category({MiscTests.class, LargeTests.class})<a name="line.86"></a>
-<span class="sourceLineNo">087</span>public class TestHBaseFsckOneRS extends BaseTestHBaseFsck {<a name="line.87"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.master.TableLockManager;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionImpl;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionFactory;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationQueues;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.hbck.HbckTestingUtil;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.AfterClass;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.Assert;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.Before;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.BeforeClass;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.Ignore;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.Test;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.experimental.categories.Category;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>import java.io.IOException;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import java.util.ArrayList;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import java.util.LinkedList;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import java.util.List;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import java.util.HashMap;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import java.util.Map;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import java.util.concurrent.Callable;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import java.util.concurrent.CountDownLatch;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import java.util.concurrent.ExecutorService;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import java.util.concurrent.Executors;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import java.util.concurrent.Future;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import java.util.concurrent.SynchronousQueue;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import java.util.concurrent.TimeUnit;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  @BeforeClass<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public static void setUpBeforeClass() throws Exception {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    TEST_UTIL.getConfiguration().set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        MasterSyncObserver.class.getName());<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>    conf.setInt("hbase.regionserver.handler.count", 2);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    conf.setInt("hbase.regionserver.metahandler.count", 30);<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>    conf.setInt("hbase.htable.threads.max", POOL_SIZE);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    conf.setInt("hbase.hconnection.threads.max", 2 * POOL_SIZE);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    conf.setInt("hbase.hconnection.threads.core", POOL_SIZE);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    conf.setInt("hbase.hbck.close.timeout", 2 * REGION_ONLINE_TIMEOUT);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, 8 * REGION_ONLINE_TIMEOUT);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    TEST_UTIL.startMiniCluster(1);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    tableExecutorService = new ThreadPoolExecutor(1, POOL_SIZE, 60, TimeUnit.SECONDS,<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        new SynchronousQueue&lt;Runnable&gt;(), Threads.newDaemonThreadFactory("testhbck"));<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>    hbfsckExecutorService = new ScheduledThreadPoolExecutor(POOL_SIZE);<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>    AssignmentManager assignmentManager =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    regionStates = assignmentManager.getRegionStates();<a name="line.111"></a>
+<span class="sourceLineNo">089</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.*;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import static org.junit.Assert.*;<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>@Category({MiscTests.class, LargeTests.class})<a name="line.92"></a>
+<span class="sourceLineNo">093</span>public class TestHBaseFsckOneRS extends BaseTestHBaseFsck {<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @BeforeClass<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static void setUpBeforeClass() throws Exception {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    TEST_UTIL.getConfiguration().set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY,<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        MasterSyncObserver.class.getName());<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    conf.setInt("hbase.regionserver.handler.count", 2);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    conf.setInt("hbase.regionserver.metahandler.count", 30);<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    conf.setInt("hbase.htable.threads.max", POOL_SIZE);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    conf.setInt("hbase.hconnection.threads.max", 2 * POOL_SIZE);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    conf.setInt("hbase.hconnection.threads.core", POOL_SIZE);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    conf.setInt("hbase.hbck.close.timeout", 2 * REGION_ONLINE_TIMEOUT);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    conf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY, 8 * REGION_ONLINE_TIMEOUT);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    TEST_UTIL.startMiniCluster(1);<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    tableExecutorService = new ThreadPoolExecutor(1, POOL_SIZE, 60, TimeUnit.SECONDS,<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        new SynchronousQueue&lt;Runnable&gt;(), Threads.newDaemonThreadFactory("testhbck"));<a name="line.111"></a>
 <span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>    connection = (ClusterConnection) TEST_UTIL.getConnection();<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    hbfsckExecutorService = new ScheduledThreadPoolExecutor(POOL_SIZE);<a name="line.113"></a>
 <span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    admin = connection.getAdmin();<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    admin.setBalancerRunning(false, true);<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    TEST_UTIL.waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    TEST_UTIL.waitUntilAllRegionsAssigned(TableName.NAMESPACE_TABLE_NAME);<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>  @AfterClass<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public static void tearDownAfterClass() throws Exception {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    tableExecutorService.shutdown();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    hbfsckExecutorService.shutdown();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    admin.close();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    TEST_UTIL.shutdownMiniCluster();<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>  @Before<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void setUp() {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    EnvironmentEdgeManager.reset();<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">115</span>    AssignmentManager assignmentManager =<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    regionStates = assignmentManager.getRegionStates();<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>    connection = (ClusterConnection) TEST_UTIL.getConnection();<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>    admin = connection.getAdmin();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    admin.setBalancerRunning(false, true);<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    TEST_UTIL.waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    TEST_UTIL.waitUntilAllRegionsAssigned(TableName.NAMESPACE_TABLE_NAME);<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>  @AfterClass<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public static void tearDownAfterClass() throws Exception {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    tableExecutorService.shutdown();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    hbfsckExecutorService.shutdown();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    admin.close();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    TEST_UTIL.shutdownMiniCluster();<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>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * This creates a clean table and confirms that the table is clean.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  @Test(timeout=180000)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  public void testHBaseFsckClean() throws Exception {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    assertNoErrors(doFsck(conf, false));<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    TableName table = TableName.valueOf("tableClean");<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    try {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      assertNoErrors(hbck);<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>      setupTable(table);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>      // We created 1 table, should be fine<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      hbck = doFsck(conf, false);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      assertNoErrors(hbck);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.153"></a>
+<span class="sourceLineNo">136</span>  @Before<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public void setUp() {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    EnvironmentEdgeManager.reset();<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>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * This creates a clean table and confirms that the table is clean.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Test(timeout=180000)<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void testHBaseFsckClean() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    assertNoErrors(doFsck(conf, false));<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    TableName table = TableName.valueOf("tableClean");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    try {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      assertNoErrors(hbck);<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>      setupTable(table);<a name="line.153"></a>
 <span class="sourceLineNo">154</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    } finally {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      cleanupTable(table);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * Test thread pooling in the case where there are more regions than threads<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Test (timeout=180000)<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public void testHbckThreadpooling() throws Exception {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    TableName table =<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        TableName.valueOf("tableDupeStartKey");<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    try {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      // Create table with 4 regions<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      setupTable(table);<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>      // limit number of threads to 1.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      Configuration newconf = new Configuration(conf);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      newconf.setInt("hbasefsck.numthreads", 1);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assertNoErrors(doFsck(newconf, false));<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>      // We should pass without triggering a RejectedExecutionException<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    } finally {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      cleanupTable(table);<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">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We created 1 table, should be fine<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      hbck = doFsck(conf, false);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      assertNoErrors(hbck);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    } finally {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      cleanupTable(table);<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>  /**<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * Test thread pooling in the case where there are more regions than threads<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  @Test (timeout=180000)<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public void testHbckThreadpooling() throws Exception {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    TableName table =<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        TableName.valueOf("tableDupeStartKey");<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    try {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      // Create table with 4 regions<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      setupTable(table);<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // limit number of threads to 1.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      Configuration newconf = new Configuration(conf);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      newconf.setInt("hbasefsck.numthreads", 1);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      assertNoErrors(doFsck(newconf, false));<a name="line.180"></a>
 <span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @Test (timeout=180000)<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public void testTableWithNoRegions() throws Exception {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    // We might end up with empty regions in a table<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    // see also testNoHdfsTable()<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    TableName table =<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        TableName.valueOf(name.getMethodName());<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      // create table with one region<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      HTableDescriptor desc = new HTableDescriptor(table);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      createTable(TEST_UTIL, desc, null);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      tbl = connection.getTable(table, tableExecutorService);<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      // Mess it up by leaving a hole in the assignment, meta, and hdfs data<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      deleteRegion(conf, tbl.getTableDescriptor(), HConstants.EMPTY_START_ROW,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          HConstants.EMPTY_END_ROW, false, false, true);<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>      doFsck(conf, true);<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>      // fix hole<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      doFsck(conf, true);<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>      // check that hole fixed<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      assertNoErrors(doFsck(conf, false));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } finally {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      cleanupTable(table);<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><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  @Test (timeout=180000)<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  public void testHbckFixOrphanTable() throws Exception {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    TableName table = TableName.valueOf("tableInfo");<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    FileSystem fs = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    Path tableinfo = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    try {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      setupTable(table);<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>      Path hbaseTableDir = FSUtils.getTableDir(<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          FSUtils.getRootDir(conf), table);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      fs = hbaseTableDir.getFileSystem(conf);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      FileStatus status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      tableinfo = status.getPath();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      fs.rename(tableinfo, new Path("/.tableinfo"));<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      //to report error if .tableinfo is missing.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NO_TABLEINFO_FILE });<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>      // fix OrphanTable with default .tableinfo (htd not yet cached on master)<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      hbck = doFsck(conf, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      assertNoErrors(hbck);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      status = null;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      assertNotNull(status);<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      HTableDescriptor htd = admin.getTableDescriptor(table);<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      htd.setValue("NOT_DEFAULT", "true");<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      admin.disableTable(table);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      admin.modifyTable(table, htd);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      admin.enableTable(table);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      fs.delete(status.getPath(), true);<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>      // fix OrphanTable with cache<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      htd = admin.getTableDescriptor(table); // warms up cached htd on master<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      hbck = doFsck(conf, true);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      assertNoErrors(hbck);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      assertNotNull(status);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      htd = admin.getTableDescriptor(table);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      assertEquals(htd.getValue("NOT_DEFAULT"), "true");<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    } finally {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      if (fs != null) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        fs.rename(new Path("/.tableinfo"), tableinfo);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      cleanupTable(table);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>  @Test (timeout=180000)<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  public void testReadOnlyProperty() throws Exception {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    HBaseFsck hbck = doFsck(conf, false);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    Assert.assertEquals("shouldIgnorePreCheckPermission", true,<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        hbck.shouldIgnorePreCheckPermission());<a name="line.268"></a>
+<span class="sourceLineNo">182</span>      // We should pass without triggering a RejectedExecutionException<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    } finally {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      cleanupTable(table);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>  @Test (timeout=180000)<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public void testTableWithNoRegions() throws Exception {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    // We might end up with empty regions in a table<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    // see also testNoHdfsTable()<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    TableName table =<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        TableName.valueOf(name.getMethodName());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      // create table with one region<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      HTableDescriptor desc = new HTableDescriptor(table);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      createTable(TEST_UTIL, desc, null);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      tbl = connection.getTable(table, tableExecutorService);<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // Mess it up by leaving a hole in the assignment, meta, and hdfs data<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      deleteRegion(conf, tbl.getTableDescriptor(), HConstants.EMPTY_START_ROW,<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          HConstants.EMPTY_END_ROW, false, false, true);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>      doFsck(conf, true);<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>      // fix hole<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      doFsck(conf, true);<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>      // check that hole fixed<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      assertNoErrors(doFsck(conf, false));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    } finally {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      cleanupTable(table);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>  @Test (timeout=180000)<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  public void testHbckFixOrphanTable() throws Exception {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    TableName table = TableName.valueOf("tableInfo");<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    FileSystem fs = null;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    Path tableinfo = null;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    try {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      setupTable(table);<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>      Path hbaseTableDir = FSUtils.getTableDir(<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          FSUtils.getRootDir(conf), table);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      fs = hbaseTableDir.getFileSystem(conf);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      FileStatus status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      tableinfo = status.getPath();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      fs.rename(tableinfo, new Path("/.tableinfo"));<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>      //to report error if .tableinfo is missing.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.NO_TABLEINFO_FILE });<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>      // fix OrphanTable with default .tableinfo (htd not yet cached on master)<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      hbck = doFsck(conf, true);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      assertNoErrors(hbck);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      status = null;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      assertNotNull(status);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      HTableDescriptor htd = admin.getTableDescriptor(table);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      htd.setValue("NOT_DEFAULT", "true");<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      admin.disableTable(table);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      admin.modifyTable(table, htd);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      admin.enableTable(table);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      fs.delete(status.getPath(), true);<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>      // fix OrphanTable with cache<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      htd = admin.getTableDescriptor(table); // warms up cached htd on master<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      hbck = doFsck(conf, true);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      assertNoErrors(hbck);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      status = FSTableDescriptors.getTableInfoPath(fs, hbaseTableDir);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      assertNotNull(status);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      htd = admin.getTableDescriptor(table);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      assertEquals(htd.getValue("NOT_DEFAULT"), "true");<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    } finally {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      if (fs != null) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        fs.rename(new Path("/.tableinfo"), tableinfo);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      }<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      cleanupTable(table);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
 <span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    hbck = doFsck(conf, true);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Assert.assertEquals("shouldIgnorePreCheckPermission", false,<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        hbck.shouldIgnorePreCheckPermission());<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    hbck = doFsck(conf, true);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    hbck.setIgnorePreCheckPermission(true);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Assert.assertEquals("shouldIgnorePreCheckPermission", true,<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        hbck.shouldIgnorePreCheckPermission());<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">270</span>  @Test (timeout=180000)<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public void testReadOnlyProperty() throws Exception {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    HBaseFsck hbck = doFsck(conf, false);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    Assert.assertEquals("shouldIgnorePreCheckPermission", true,<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        hbck.shouldIgnorePreCheckPermission());<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>    hbck = doFsck(conf, true);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Assert.assertEquals("shouldIgnorePreCheckPermission", false,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        hbck.shouldIgnorePreCheckPermission());<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>   * This creates and fixes a bad table where a region is completely contained<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * by another region, and there is a hole (sort of like a bad split)<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  @Test (timeout=180000)<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public void testOverlapAndOrphan() throws Exception {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    TableName table =<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        TableName.valueOf("tableOverlapAndOrphan");<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      setupTable(table);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>      // Mess it up by creating an overlap in the metadata<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      admin.disableTable(table);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("A"), Bytes.toBytes("B"), true,<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          true, false, true, HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      admin.enableTable(table);<a name="line.296"></a>
+<span class="sourceLineNo">280</span>    hbck = doFsck(conf, true);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    hbck.setIgnorePreCheckPermission(true);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Assert.assertEquals("shouldIgnorePreCheckPermission", true,<a name="line.282"></a>
+<span class="sourceLineNo">283</span>        hbck.shouldIgnorePreCheckPermission());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * This creates and fixes a bad table where a region is completely contained<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * by another region, and there is a hole (sort of like a bad split)<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Test (timeout=180000)<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public void testOverlapAndOrphan() throws Exception {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    TableName table =<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        TableName.valueOf("tableOverlapAndOrphan");<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      setupTable(table);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.296"></a>
 <span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>      HRegionInfo hriOverlap =<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          createRegion(tbl.getTableDescriptor(), Bytes.toBytes("A2"), Bytes.toBytes("B"));<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          .waitForAssignment(hriOverlap);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      assertErrors(hbck,<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.ORPHAN_HDFS_REGION, HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.308"></a>
-<span class="sourceLineNo">309</span>              HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>      // fix the problem.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      doFsck(conf, true);<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // verify that overlaps are fixed<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      HBaseFsck hbck2 = doFsck(conf,false);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      assertNoErrors(hbck2);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      assertEquals(0, hbck2.getOverlapGroups(table).size());<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    } finally {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      cleanupTable(table);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * This creates and fixes a bad table where a region overlaps two regions --<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * a start key contained in another region and its end key is contained in<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * yet another region.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  @Test (timeout=180000)<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  public void testCoveredStartKey() throws Exception {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    TableName table =<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        TableName.valueOf("tableCoveredStartKey");<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    try {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      setupTable(table);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // Mess it up by creating an overlap in the metadata<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      HRegionInfo hriOverlap =<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          createRegion(tbl.getTableDescriptor(), Bytes.toBytes("A2"), Bytes.toBytes("B2"));<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          .waitForAssignment(hriOverlap);<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN,<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN });<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      assertEquals(3, hbck.getOverlapGroups(table).size());<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.350"></a>
+<span class="sourceLineNo">298</span>      // Mess it up by creating an overlap in the metadata<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      admin.disableTable(table);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("A"), Bytes.toBytes("B"), true,<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          true, false, true, HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      admin.enableTable(table);<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>      HRegionInfo hriOverlap =<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          createRegion(tbl.getTableDescriptor(), Bytes.toBytes("A2"), Bytes.toBytes("B"));<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .waitForAssignment(hriOverlap);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      assertErrors(hbck,<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.ORPHAN_HDFS_REGION, HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.314"></a>
+<span class="sourceLineNo">315</span>              HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>      // fix the problem.<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      doFsck(conf, true);<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>      // verify that overlaps are fixed<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      HBaseFsck hbck2 = doFsck(conf,false);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      assertNoErrors(hbck2);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      assertEquals(0, hbck2.getOverlapGroups(table).size());<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    } finally {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      cleanupTable(table);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    }<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>   * This creates and fixes a bad table where a region overlaps two regions --<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * a start key contained in another region and its end key is contained in<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * yet another region.<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   */<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  @Test (timeout=180000)<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  public void testCoveredStartKey() throws Exception {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    TableName table =<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        TableName.valueOf("tableCoveredStartKey");<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    try {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      setupTable(table);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>      // Mess it up by creating an overlap in the metadata<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      HRegionInfo hriOverlap =<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          createRegion(tbl.getTableDescriptor(), Bytes.toBytes("A2"), Bytes.toBytes("B2"));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          .waitForAssignment(hriOverlap);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>      // fix the problem.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      doFsck(conf, true);<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // verify that overlaps are fixed<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      HBaseFsck hbck2 = doFsck(conf, false);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      assertErrors(hbck2, new HBaseFsck.ErrorReporter.ERROR_CODE[0]);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      assertEquals(0, hbck2.getOverlapGroups(table).size());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    } finally {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      cleanupTable(table);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * This creates and fixes a bad table with a missing region -- hole in meta<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * and data missing in the fs.<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  @Test (timeout=180000)<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public void testRegionHole() throws Exception {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    TableName table =<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        TableName.valueOf("tableRegionHole");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    try {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      setupTable(table);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span>      // Mess it up by leaving a hole in the assignment, meta, and hdfs data<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      admin.disableTable(table);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          true, true);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      admin.enableTable(table);<a name="line.381"></a>
+<span class="sourceLineNo">352</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN,<a name="line.353"></a>
+<span class="sourceLineNo">354</span>          HBaseFsck.ErrorReporter.ERROR_CODE.OVERLAP_IN_REGION_CHAIN });<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      assertEquals(3, hbck.getOverlapGroups(table).size());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span>      // fix the problem.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      doFsck(conf, true);<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // verify that overlaps are fixed<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      HBaseFsck hbck2 = doFsck(conf, false);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      assertErrors(hbck2, new HBaseFsck.ErrorReporter.ERROR_CODE[0]);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      assertEquals(0, hbck2.getOverlapGroups(table).size());<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    } finally {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      cleanupTable(table);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>  /**<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * This creates and fixes a bad table with a missing region -- hole in meta<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * and data missing in the fs.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  @Test (timeout=180000)<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  public void testRegionHole() throws Exception {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    TableName table =<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        TableName.valueOf("tableRegionHole");<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    try {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      setupTable(table);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      // holes are separate from overlap groups<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>      // fix hole<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      doFsck(conf, true);<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>      // check that hole fixed<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      assertNoErrors(doFsck(conf,false));<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      assertEquals(ROWKEYS.length - 2, countRows()); // lost a region so lost a row<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    } finally {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      cleanupTable(table);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  /**<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * The region is not deployed when the table is disabled.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  @Test (timeout=180000)<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public void testRegionShouldNotBeDeployed() throws Exception {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    TableName table =<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        TableName.valueOf("tableRegionShouldNotBeDeployed");<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    try {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      LOG.info("Starting testRegionShouldNotBeDeployed.");<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      assertTrue(cluster.waitForActiveAndReadyMaster());<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>      byte[][] SPLIT_KEYS = new byte[][] { new byte[0], Bytes.toBytes("aaa"),<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          Bytes.toBytes("bbb"), Bytes.toBytes("ccc"), Bytes.toBytes("ddd") };<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      HTableDescriptor htdDisabled = new HTableDescriptor(table);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      htdDisabled.addFamily(new HColumnDescriptor(FAM));<a name="line.415"></a>
+<span class="sourceLineNo">383</span>      // Mess it up by leaving a hole in the assignment, meta, and hdfs data<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      admin.disableTable(table);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          true, true);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      admin.enableTable(table);<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // holes are separate from overlap groups<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>      // fix hole<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      doFsck(conf, true);<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>      // check that hole fixed<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      assertNoErrors(doFsck(conf,false));<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      assertEquals(ROWKEYS.length - 2, countRows()); // lost a region so lost a row<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    } finally {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      cleanupTable(table);<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><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  /**<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * The region is not deployed when the table is disabled.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  @Test (timeout=180000)<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  public void testRegionShouldNotBeDeployed() throws Exception {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    TableName table =<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        TableName.valueOf("tableRegionShouldNotBeDeployed");<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    try {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      LOG.info("Starting testRegionShouldNotBeDeployed.");<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      assertTrue(cluster.waitForActiveAndReadyMaster());<a name="line.415"></a>
 <span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>      // Write the .tableinfo<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      FSTableDescriptors fstd = new FSTableDescriptors(conf);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      fstd.createTableDescriptor(htdDisabled);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      List&lt;HRegionInfo&gt; disabledRegions =<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          TEST_UTIL.createMultiRegionsInMeta(conf, htdDisabled, SPLIT_KEYS);<a name="line.421"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>      byte[][] SPLIT_KEYS = new byte[][] { new byte[0], Bytes.toBytes("aaa"),<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          Bytes.toBytes("bbb"), Bytes.toBytes("ccc"), Bytes.toBytes("ddd") };<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      HTableDescriptor htdDisabled = new HTableDescriptor(table);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      htdDisabled.addFamily(new HColumnDescriptor(FAM));<a name="line.421"></a>
 <span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>      // Let's just assign everything to first RS<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      HRegionServer hrs = cluster.getRegionServer(0);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>      // Create region files.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      admin.disableTable(table);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      admin.enableTable(table);<a name="line.428"></a>
-<span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>      // Disable the table and close its regions<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      admin.disableTable(table);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      HRegionInfo region = disabledRegions.remove(0);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      byte[] regionName = region.getRegionName();<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // The region should not be assigned currently<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      assertTrue(cluster.getServerWith(regionName) == -1);<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>      // Directly open a region on a region server.<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      // If going through AM/ZK, the region won't be open.<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // Even it is opened, AM will close it which causes<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      // flakiness of this test.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      HRegion r = HRegion.openHRegion(<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          region, htdDisabled, hrs.getWAL(region), conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      hrs.addToOnlineRegions(r);<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      assertErrors(hbck, new HBaseFsck.ErrorReporter.ERROR_CODE[] { HBaseFsck.ErrorReporter.ERROR_CODE.SHOULD_NOT_BE_DEPLOYED });<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // fix this fault<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      doFsck(conf, true);<a name="line.450"></a>
+<span class="sourceLineNo">423</span>      // Write the .tableinfo<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      FSTableDescriptors fstd = new FSTableDescriptors(conf);<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      fstd.createTableDescriptor(htdDisabled);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      List&lt;HRegionInfo&gt; disabledRegions =<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          TEST_UTIL.createMultiRegionsInMeta(conf, htdDisabled, SPLIT_KEYS);<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>      // Let's just assign everything to first RS<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      HRegionServer hrs = cluster.getRegionServer(0);<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>      // Create region files.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      admin.disableTable(table);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      admin.enableTable(table);<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>      // Disable the table and close its regions<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      admin.disableTable(table);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      HRegionInfo region = disabledRegions.remove(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      byte[] regionName = region.getRegionName();<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // The region should not be assigned currently<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      assertTrue(cluster.getServerWith(regionName) == -1);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>      // Directly open a region on a region server.<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      // If going through AM/ZK, the region won't be open.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // Even it is opened, AM will close it which causes<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // flakiness of this test.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      HRegion r = HRegion.openHRegion(<a name="line.448"></a>
+<span class="sourceLineNo">449</span>          region, htdDisabled, hrs.getWAL(region), conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      hrs.addToOnlineRegions(r);<a name="line.450"></a>
 <span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // check result<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      assertNoErrors(doFsck(conf, false));<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } finally {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      admin.enableTable(table);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      cleanupTable(table);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  /**<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * This test makes sure that parallel instances of Hbck is disabled.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   *<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @throws Exception<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
-<span class="sourceLineNo">465</span>  @Test(timeout=180000)<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  public void testParallelHbck() throws Exception {<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    final ExecutorService service;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    final Future&lt;HBaseFsck&gt; hbck1,hbck2;<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    class RunHbck implements Callable&lt;HBaseFsck&gt; {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      boolean fail = true;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      public HBaseFsck call(){<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        Configuration c = new Configuration(conf);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>        c.setInt("hbase.hbck.lockfile.attempts", 1);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        // HBASE-13574 found that in HADOOP-2.6 and later, the create file would internally retry.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        // To avoid flakiness of the test, set low max wait time.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        c.setInt("hbase.hbck.lockfile.maxwaittime", 3);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        try{<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          return doFsck(c, true); // Exclusive hbck only when fixing<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        } catch(Exception e){<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          if (e.getMessage().contains("Duplicate hbck")) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>            fail = false;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        }<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        // If we reach here, then an exception was caught<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        if (fail) fail();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        return null;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    service = Executors.newFixedThreadPool(2);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    hbck1 = service.submit(new RunHbck());<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    hbck2 = service.submit(new RunHbck());<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    service.shutdown();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    //wait for 15 seconds, for both hbck calls finish<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    service.awaitTermination(15, TimeUnit.SECONDS);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    HBaseFsck h1 = hbck1.get();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    HBaseFsck h2 = hbck2.get();<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    // Make sure only one of the calls was successful<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    assert(h1 == null || h2 == null);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    if (h1 != null) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert(h1.getRetCode() &gt;= 0);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    if (h2 != null) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      assert(h2.getRetCode() &gt;= 0);<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><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  /**<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * This test makes sure that with enough retries both parallel instances<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * of hbck will be completed successfully.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   *<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws Exception<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @Test (timeout=180000)<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  public void testParallelWithRetriesHbck() throws Exception {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    final ExecutorService service;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    final Future&lt;HBaseFsck&gt; hbck1,hbck2;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>    // With the ExponentialBackoffPolicyWithLimit (starting with 200 milliseconds sleep time, and<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    // max sleep time of 5 seconds), we can retry around 15 times within 80 seconds before bail out.<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    //<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Note: the reason to use 80 seconds is that in HADOOP-2.6 and later, the create file would<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    // retry up to HdfsConstants.LEASE_SOFTLIMIT_PERIOD (60 seconds).  See HBASE-13574 for more<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    // details.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    final int timeoutInSeconds = 80;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    final int sleepIntervalInMilliseconds = 200;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    final int maxSleepTimeInMilliseconds = 6000;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    final int maxRetryAttempts = 15;<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    class RunHbck implements Callable&lt;HBaseFsck&gt;{<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>      @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      public HBaseFsck call() throws Exception {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        // Increase retry attempts to make sure the non-active hbck doesn't get starved<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        Configuration c = new Configuration(conf);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        c.setInt("hbase.hbck.lockfile.maxwaittime", timeoutInSeconds);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        c.setInt("hbase.hbck.lockfile.attempt.sleep.interval", sleepIntervalInMilliseconds);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        c.setInt("hbase.hbck.lockfile.attempt.maxsleeptime", maxSleepTimeInMilliseconds);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        c.setInt("hbase.hbck.lockfile.attempts", maxRetryAttempts);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        return doFsck(c, false);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    service = Executors.newFixedThreadPool(2);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    hbck1 = service.submit(new RunHbck());<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    hbck2 = service.submit(new RunHbck());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    service.shutdown();<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    //wait for some time, for both hbck calls finish<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    service.awaitTermination(timeoutInSeconds * 2, TimeUnit.SECONDS);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    HBaseFsck h1 = hbck1.get();<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    HBaseFsck h2 = hbck2.get();<a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // Both should be successful<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    assertNotNull(h1);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    assertNotNull(h2);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    assert(h1.getRetCode() &gt;= 0);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    assert(h2.getRetCode() &gt;= 0);<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>  @Test (timeout = 180000)<a name="line.561"></a>
-<span class="sourceLineNo">562</s

<TRUNCATED>

[04/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html b/xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html
index 0b5f17e..33c89d5 100644
--- a/xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html
+++ b/xref/org/apache/hadoop/hbase/protobuf/ProtobufUtil.html
@@ -3147,55 +3147,61 @@
 <a class="jxr_linenumber" name="3137" href="#3137">3137</a> <em class="jxr_javadoccomment">   */</em>
 <a class="jxr_linenumber" name="3138" href="#3138">3138</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> HBaseProtos.VersionInfo getVersionInfo() {
 <a class="jxr_linenumber" name="3139" href="#3139">3139</a>     HBaseProtos.VersionInfo.Builder builder = HBaseProtos.VersionInfo.newBuilder();
-<a class="jxr_linenumber" name="3140" href="#3140">3140</a>     builder.setVersion(VersionInfo.getVersion());
-<a class="jxr_linenumber" name="3141" href="#3141">3141</a>     builder.setUrl(VersionInfo.getUrl());
-<a class="jxr_linenumber" name="3142" href="#3142">3142</a>     builder.setRevision(VersionInfo.getRevision());
-<a class="jxr_linenumber" name="3143" href="#3143">3143</a>     builder.setUser(VersionInfo.getUser());
-<a class="jxr_linenumber" name="3144" href="#3144">3144</a>     builder.setDate(VersionInfo.getDate());
-<a class="jxr_linenumber" name="3145" href="#3145">3145</a>     builder.setSrcChecksum(VersionInfo.getSrcChecksum());
-<a class="jxr_linenumber" name="3146" href="#3146">3146</a>     <strong class="jxr_keyword">return</strong> builder.build();
-<a class="jxr_linenumber" name="3147" href="#3147">3147</a>   }
-<a class="jxr_linenumber" name="3148" href="#3148">3148</a> 
-<a class="jxr_linenumber" name="3149" href="#3149">3149</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="3150" href="#3150">3150</a> <em class="jxr_javadoccomment">   * Convert SecurityCapabilitiesResponse.Capability to SecurityCapability</em>
-<a class="jxr_linenumber" name="3151" href="#3151">3151</a> <em class="jxr_javadoccomment">   * @param capabilities capabilities returned in the SecurityCapabilitiesResponse message</em>
-<a class="jxr_linenumber" name="3152" href="#3152">3152</a> <em class="jxr_javadoccomment">   * @return the converted list of SecurityCapability elements</em>
-<a class="jxr_linenumber" name="3153" href="#3153">3153</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="3154" href="#3154">3154</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;SecurityCapability&gt; toSecurityCapabilityList(
-<a class="jxr_linenumber" name="3155" href="#3155">3155</a>       List&lt;MasterProtos.SecurityCapabilitiesResponse.Capability&gt; capabilities) {
-<a class="jxr_linenumber" name="3156" href="#3156">3156</a>     List&lt;SecurityCapability&gt; scList = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(capabilities.size());
-<a class="jxr_linenumber" name="3157" href="#3157">3157</a>     <strong class="jxr_keyword">for</strong> (MasterProtos.SecurityCapabilitiesResponse.Capability c: capabilities) {
-<a class="jxr_linenumber" name="3158" href="#3158">3158</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="3159" href="#3159">3159</a>         scList.add(SecurityCapability.valueOf(c.getNumber()));
-<a class="jxr_linenumber" name="3160" href="#3160">3160</a>       } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException e) {
-<a class="jxr_linenumber" name="3161" href="#3161">3161</a>         <em class="jxr_comment">// Unknown capability, just ignore it. We don't understand the new capability</em>
-<a class="jxr_linenumber" name="3162" href="#3162">3162</a>         <em class="jxr_comment">// but don't care since by definition we cannot take advantage of it.</em>
-<a class="jxr_linenumber" name="3163" href="#3163">3163</a>       }
-<a class="jxr_linenumber" name="3164" href="#3164">3164</a>     }
-<a class="jxr_linenumber" name="3165" href="#3165">3165</a>     <strong class="jxr_keyword">return</strong> scList;
-<a class="jxr_linenumber" name="3166" href="#3166">3166</a>   }
-<a class="jxr_linenumber" name="3167" href="#3167">3167</a> 
-<a class="jxr_linenumber" name="3168" href="#3168">3168</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> HBaseProtos.TimeRange.Builder timeRangeToProto(<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html">TimeRange</a> timeRange) {
-<a class="jxr_linenumber" name="3169" href="#3169">3169</a>     HBaseProtos.TimeRange.Builder timeRangeBuilder =
-<a class="jxr_linenumber" name="3170" href="#3170">3170</a>         HBaseProtos.TimeRange.newBuilder();
-<a class="jxr_linenumber" name="3171" href="#3171">3171</a>     timeRangeBuilder.setFrom(timeRange.getMin());
-<a class="jxr_linenumber" name="3172" href="#3172">3172</a>     timeRangeBuilder.setTo(timeRange.getMax());
-<a class="jxr_linenumber" name="3173" href="#3173">3173</a>     <strong class="jxr_keyword">return</strong> timeRangeBuilder;
-<a class="jxr_linenumber" name="3174" href="#3174">3174</a>   }
-<a class="jxr_linenumber" name="3175" href="#3175">3175</a> 
-<a class="jxr_linenumber" name="3176" href="#3176">3176</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html">TimeRange</a> protoToTimeRange(HBaseProtos.TimeRange timeRange) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="3177" href="#3177">3177</a>       <strong class="jxr_keyword">long</strong> minStamp = 0;
-<a class="jxr_linenumber" name="3178" href="#3178">3178</a>       <strong class="jxr_keyword">long</strong> maxStamp = Long.MAX_VALUE;
-<a class="jxr_linenumber" name="3179" href="#3179">3179</a>       <strong class="jxr_keyword">if</strong> (timeRange.hasFrom()) {
-<a class="jxr_linenumber" name="3180" href="#3180">3180</a>         minStamp = timeRange.getFrom();
-<a class="jxr_linenumber" name="3181" href="#3181">3181</a>       }
-<a class="jxr_linenumber" name="3182" href="#3182">3182</a>       <strong class="jxr_keyword">if</strong> (timeRange.hasTo()) {
-<a class="jxr_linenumber" name="3183" href="#3183">3183</a>         maxStamp = timeRange.getTo();
-<a class="jxr_linenumber" name="3184" href="#3184">3184</a>       }
-<a class="jxr_linenumber" name="3185" href="#3185">3185</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html">TimeRange</a>(minStamp, maxStamp);
-<a class="jxr_linenumber" name="3186" href="#3186">3186</a>   }
-<a class="jxr_linenumber" name="3187" href="#3187">3187</a> 
-<a class="jxr_linenumber" name="3188" href="#3188">3188</a> }
+<a class="jxr_linenumber" name="3140" href="#3140">3140</a>     String version = VersionInfo.getVersion();
+<a class="jxr_linenumber" name="3141" href="#3141">3141</a>     builder.setVersion(version);
+<a class="jxr_linenumber" name="3142" href="#3142">3142</a>     String[] components = version.split(<span class="jxr_string">"&#92;&#92;."</span>);
+<a class="jxr_linenumber" name="3143" href="#3143">3143</a>     <strong class="jxr_keyword">if</strong> (components != <strong class="jxr_keyword">null</strong> &amp;&amp; components.length &gt; 2) {
+<a class="jxr_linenumber" name="3144" href="#3144">3144</a>       builder.setVersionMajor(Integer.parseInt(components[0]));
+<a class="jxr_linenumber" name="3145" href="#3145">3145</a>       builder.setVersionMinor(Integer.parseInt(components[1]));
+<a class="jxr_linenumber" name="3146" href="#3146">3146</a>     }
+<a class="jxr_linenumber" name="3147" href="#3147">3147</a>     builder.setUrl(VersionInfo.getUrl());
+<a class="jxr_linenumber" name="3148" href="#3148">3148</a>     builder.setRevision(VersionInfo.getRevision());
+<a class="jxr_linenumber" name="3149" href="#3149">3149</a>     builder.setUser(VersionInfo.getUser());
+<a class="jxr_linenumber" name="3150" href="#3150">3150</a>     builder.setDate(VersionInfo.getDate());
+<a class="jxr_linenumber" name="3151" href="#3151">3151</a>     builder.setSrcChecksum(VersionInfo.getSrcChecksum());
+<a class="jxr_linenumber" name="3152" href="#3152">3152</a>     <strong class="jxr_keyword">return</strong> builder.build();
+<a class="jxr_linenumber" name="3153" href="#3153">3153</a>   }
+<a class="jxr_linenumber" name="3154" href="#3154">3154</a> 
+<a class="jxr_linenumber" name="3155" href="#3155">3155</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="3156" href="#3156">3156</a> <em class="jxr_javadoccomment">   * Convert SecurityCapabilitiesResponse.Capability to SecurityCapability</em>
+<a class="jxr_linenumber" name="3157" href="#3157">3157</a> <em class="jxr_javadoccomment">   * @param capabilities capabilities returned in the SecurityCapabilitiesResponse message</em>
+<a class="jxr_linenumber" name="3158" href="#3158">3158</a> <em class="jxr_javadoccomment">   * @return the converted list of SecurityCapability elements</em>
+<a class="jxr_linenumber" name="3159" href="#3159">3159</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="3160" href="#3160">3160</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> List&lt;SecurityCapability&gt; toSecurityCapabilityList(
+<a class="jxr_linenumber" name="3161" href="#3161">3161</a>       List&lt;MasterProtos.SecurityCapabilitiesResponse.Capability&gt; capabilities) {
+<a class="jxr_linenumber" name="3162" href="#3162">3162</a>     List&lt;SecurityCapability&gt; scList = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(capabilities.size());
+<a class="jxr_linenumber" name="3163" href="#3163">3163</a>     <strong class="jxr_keyword">for</strong> (MasterProtos.SecurityCapabilitiesResponse.Capability c: capabilities) {
+<a class="jxr_linenumber" name="3164" href="#3164">3164</a>       <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="3165" href="#3165">3165</a>         scList.add(SecurityCapability.valueOf(c.getNumber()));
+<a class="jxr_linenumber" name="3166" href="#3166">3166</a>       } <strong class="jxr_keyword">catch</strong> (IllegalArgumentException e) {
+<a class="jxr_linenumber" name="3167" href="#3167">3167</a>         <em class="jxr_comment">// Unknown capability, just ignore it. We don't understand the new capability</em>
+<a class="jxr_linenumber" name="3168" href="#3168">3168</a>         <em class="jxr_comment">// but don't care since by definition we cannot take advantage of it.</em>
+<a class="jxr_linenumber" name="3169" href="#3169">3169</a>       }
+<a class="jxr_linenumber" name="3170" href="#3170">3170</a>     }
+<a class="jxr_linenumber" name="3171" href="#3171">3171</a>     <strong class="jxr_keyword">return</strong> scList;
+<a class="jxr_linenumber" name="3172" href="#3172">3172</a>   }
+<a class="jxr_linenumber" name="3173" href="#3173">3173</a> 
+<a class="jxr_linenumber" name="3174" href="#3174">3174</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> HBaseProtos.TimeRange.Builder timeRangeToProto(<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html">TimeRange</a> timeRange) {
+<a class="jxr_linenumber" name="3175" href="#3175">3175</a>     HBaseProtos.TimeRange.Builder timeRangeBuilder =
+<a class="jxr_linenumber" name="3176" href="#3176">3176</a>         HBaseProtos.TimeRange.newBuilder();
+<a class="jxr_linenumber" name="3177" href="#3177">3177</a>     timeRangeBuilder.setFrom(timeRange.getMin());
+<a class="jxr_linenumber" name="3178" href="#3178">3178</a>     timeRangeBuilder.setTo(timeRange.getMax());
+<a class="jxr_linenumber" name="3179" href="#3179">3179</a>     <strong class="jxr_keyword">return</strong> timeRangeBuilder;
+<a class="jxr_linenumber" name="3180" href="#3180">3180</a>   }
+<a class="jxr_linenumber" name="3181" href="#3181">3181</a> 
+<a class="jxr_linenumber" name="3182" href="#3182">3182</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html">TimeRange</a> protoToTimeRange(HBaseProtos.TimeRange timeRange) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="3183" href="#3183">3183</a>       <strong class="jxr_keyword">long</strong> minStamp = 0;
+<a class="jxr_linenumber" name="3184" href="#3184">3184</a>       <strong class="jxr_keyword">long</strong> maxStamp = Long.MAX_VALUE;
+<a class="jxr_linenumber" name="3185" href="#3185">3185</a>       <strong class="jxr_keyword">if</strong> (timeRange.hasFrom()) {
+<a class="jxr_linenumber" name="3186" href="#3186">3186</a>         minStamp = timeRange.getFrom();
+<a class="jxr_linenumber" name="3187" href="#3187">3187</a>       }
+<a class="jxr_linenumber" name="3188" href="#3188">3188</a>       <strong class="jxr_keyword">if</strong> (timeRange.hasTo()) {
+<a class="jxr_linenumber" name="3189" href="#3189">3189</a>         maxStamp = timeRange.getTo();
+<a class="jxr_linenumber" name="3190" href="#3190">3190</a>       }
+<a class="jxr_linenumber" name="3191" href="#3191">3191</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html">TimeRange</a>(minStamp, maxStamp);
+<a class="jxr_linenumber" name="3192" href="#3192">3192</a>   }
+<a class="jxr_linenumber" name="3193" href="#3193">3193</a> 
+<a class="jxr_linenumber" name="3194" href="#3194">3194</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


[13/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
index e760e81..063701f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
@@ -26,937 +26,636 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.util;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertErrors;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertNoErrors;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.doFsck;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.assertEquals;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.junit.Assert.assertFalse;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.junit.Assert.assertNotEquals;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.junit.Assert.assertNotNull;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.junit.Assert.assertTrue;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.junit.Assert.fail;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.io.IOException;<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.Collection;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.HashMap;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Map;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.UUID;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.CountDownLatch;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.ExecutorService;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.commons.logging.Log;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.LogFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileStatus;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HConstants;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.ServerName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableName;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.HBaseAdmin;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Put;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Table;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.master.AssignmentManager;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.mob.MobFileName;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.mob.MobUtils;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionImpl;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.zookeeper.KeeperException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.junit.Assert;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.junit.Before;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.junit.Ignore;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.junit.Test;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.junit.rules.TestName;<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> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.<a name="line.101"></a>
-<span class="sourceLineNo">102</span> *<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * Actual tests are in :<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * TestHBaseFsckTwoRS<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * TestHBaseFsckOneRS<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * TestHBaseFsckMOB<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * TestHBaseFsckReplicas<a name="line.107"></a>
-<span class="sourceLineNo">108</span> */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>public class BaseTestHBaseFsck {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  static final int POOL_SIZE = 7;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected static final Log LOG = LogFactory.getLog(BaseTestHBaseFsck.class);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected final static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  protected final static String FAM_STR = "fam";<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  protected final static byte[] FAM = Bytes.toBytes(FAM_STR);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  protected final static int REGION_ONLINE_TIMEOUT = 800;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  protected static RegionStates regionStates;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  protected static ExecutorService tableExecutorService;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  protected static ScheduledThreadPoolExecutor hbfsckExecutorService;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  protected static ClusterConnection connection;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  protected static Admin admin;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  // for the instance, reset every test run<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  protected Table tbl;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  protected final static byte[][] SPLITS = new byte[][] { Bytes.toBytes("A"),<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Bytes.toBytes("B"), Bytes.toBytes("C") };<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // one row per region.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  protected final static byte[][] ROWKEYS= new byte[][] {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    Bytes.toBytes("00"), Bytes.toBytes("50"), Bytes.toBytes("A0"), Bytes.toBytes("A5"),<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Bytes.toBytes("B0"), Bytes.toBytes("B5"), Bytes.toBytes("C0"), Bytes.toBytes("C5") };<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>   * Create a new region in META.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  protected HRegionInfo createRegion(final HTableDescriptor<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      htd, byte[] startKey, byte[] endKey)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(), startKey, endKey);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    MetaTableAccessor.addRegionToMeta(meta, hri);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    meta.close();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return hri;<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>   * Debugging method to dump the contents of meta.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  protected void dumpMeta(TableName tableName) throws IOException {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    for (byte[] row : metaRows) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      LOG.info(Bytes.toString(row));<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>  /**<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * This method is used to undeploy a region -- close it and attempt to<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * remove its state from the Master.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  protected void undeployRegion(Connection conn, ServerName sn,<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      HRegionInfo hri) throws IOException, InterruptedException {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (!hri.isMetaTable()) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        admin.offline(hri.getRegionName());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    } catch (IOException ioe) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      LOG.warn("Got exception when attempting to offline region "<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          + Bytes.toString(hri.getRegionName()), ioe);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param unassign if true unassign region if assigned<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param metaRow  if true remove region's row from META<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      boolean hdfs) throws IOException, InterruptedException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @param unassign if true unassign region if assigned<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param metaRow  if true remove region's row from META<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param regionInfoOnly if true remove a region dir's .regioninfo file<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param replicaId replica id<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      boolean hdfs, boolean regionInfoOnly, int replicaId)<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          throws IOException, InterruptedException {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    LOG.info("** Before delete:");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    dumpMeta(htd.getTableName());<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    List&lt;HRegionLocation&gt; locations;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    try(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      locations = rl.getAllRegionLocations();<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>    for (HRegionLocation location : locations) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      HRegionInfo hri = location.getRegionInfo();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      ServerName hsa = location.getServerName();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (Bytes.compareTo(hri.getStartKey(), startKey) == 0<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          &amp;&amp; hri.getReplicaId() == replicaId) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>        LOG.info("RegionName: " +hri.getRegionNameAsString());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        byte[] deleteRow = hri.getRegionName();<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (unassign) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.info("Undeploying region " + hri + " from server " + hsa);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          undeployRegion(connection, hsa, hri);<a name="line.217"></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.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Collection;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.UUID;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.CountDownLatch;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ExecutorService;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.Log;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.commons.logging.LogFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileStatus;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileSystem;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.Path;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Put;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Table;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.mob.MobFileName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.mob.MobUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.zookeeper.KeeperException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.junit.rules.TestName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>/**<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Actual tests are in :<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * TestHBaseFsckTwoRS<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * TestHBaseFsckOneRS<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * TestHBaseFsckMOB<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * TestHBaseFsckReplicas<a name="line.85"></a>
+<span class="sourceLineNo">086</span> */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>public class BaseTestHBaseFsck {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  static final int POOL_SIZE = 7;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected static final Log LOG = LogFactory.getLog(BaseTestHBaseFsck.class);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  protected final static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected final static String FAM_STR = "fam";<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  protected final static byte[] FAM = Bytes.toBytes(FAM_STR);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  protected final static int REGION_ONLINE_TIMEOUT = 800;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static RegionStates regionStates;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static ExecutorService tableExecutorService;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static ScheduledThreadPoolExecutor hbfsckExecutorService;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  protected static ClusterConnection connection;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected static Admin admin;<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  // for the instance, reset every test run<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected Table tbl;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected final static byte[][] SPLITS = new byte[][] { Bytes.toBytes("A"),<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    Bytes.toBytes("B"), Bytes.toBytes("C") };<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // one row per region.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected final static byte[][] ROWKEYS= new byte[][] {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    Bytes.toBytes("00"), Bytes.toBytes("50"), Bytes.toBytes("A0"), Bytes.toBytes("A5"),<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    Bytes.toBytes("B0"), Bytes.toBytes("B5"), Bytes.toBytes("C0"), Bytes.toBytes("C5") };<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>  /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * Create a new region in META.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected HRegionInfo createRegion(final HTableDescriptor<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      htd, byte[] startKey, byte[] endKey)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(), startKey, endKey);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    MetaTableAccessor.addRegionToMeta(meta, hri);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    meta.close();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return hri;<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>   * Debugging method to dump the contents of meta.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  protected void dumpMeta(TableName tableName) throws IOException {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    for (byte[] row : metaRows) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      LOG.info(Bytes.toString(row));<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>  /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * This method is used to undeploy a region -- close it and attempt to<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * remove its state from the Master.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  protected void undeployRegion(Connection conn, ServerName sn,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      HRegionInfo hri) throws IOException, InterruptedException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    try {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      if (!hri.isMetaTable()) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        admin.offline(hri.getRegionName());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    } catch (IOException ioe) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.warn("Got exception when attempting to offline region "<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          + Bytes.toString(hri.getRegionName()), ioe);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param unassign if true unassign region if assigned<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param metaRow  if true remove region's row from META<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      boolean hdfs) throws IOException, InterruptedException {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        HRegionInfo.DEFAULT_REPLICA_ID);<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>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param unassign if true unassign region if assigned<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param metaRow  if true remove region's row from META<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @param regionInfoOnly if true remove a region dir's .regioninfo file<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param replicaId replica id<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      boolean hdfs, boolean regionInfoOnly, int replicaId)<a name="line.173"></a>
+<span class="sourceLineNo">174</span>          throws IOException, InterruptedException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    LOG.info("** Before delete:");<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    dumpMeta(htd.getTableName());<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    List&lt;HRegionLocation&gt; locations;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    try(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      locations = rl.getAllRegionLocations();<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>    for (HRegionLocation location : locations) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      HRegionInfo hri = location.getRegionInfo();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      ServerName hsa = location.getServerName();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      if (Bytes.compareTo(hri.getStartKey(), startKey) == 0<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          &amp;&amp; hri.getReplicaId() == replicaId) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>        LOG.info("RegionName: " +hri.getRegionNameAsString());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        byte[] deleteRow = hri.getRegionName();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>        if (unassign) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          LOG.info("Undeploying region " + hri + " from server " + hsa);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          undeployRegion(connection, hsa, hri);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (regionInfoOnly) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          LOG.info("deleting hdfs .regioninfo data: " + hri.toString() + hsa.toString());<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.202"></a>
+<span class="sourceLineNo">203</span>              hri.getEncodedName());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          Path hriPath = new Path(p, HRegionFileSystem.REGION_INFO_FILE);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          fs.delete(hriPath, true);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (hdfs) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          LOG.info("deleting hdfs data: " + hri.toString() + hsa.toString());<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.212"></a>
+<span class="sourceLineNo">213</span>              hri.getEncodedName());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          HBaseFsck.debugLsr(conf, p);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          boolean success = fs.delete(p, true);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          HBaseFsck.debugLsr(conf, p);<a name="line.217"></a>
 <span class="sourceLineNo">218</span>        }<a name="line.218"></a>
 <span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>        if (regionInfoOnly) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          LOG.info("deleting hdfs .regioninfo data: " + hri.toString() + hsa.toString());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              hri.getEncodedName());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          Path hriPath = new Path(p, HRegionFileSystem.REGION_INFO_FILE);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          fs.delete(hriPath, true);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">220</span>        if (metaRow) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          try (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>            Delete delete = new Delete(deleteRow);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>            meta.delete(delete);<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>      }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      LOG.info(hri.toString() + hsa.toString());<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>        if (hdfs) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          LOG.info("deleting hdfs data: " + hri.toString() + hsa.toString());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.234"></a>
-<span class="sourceLineNo">235</span>              hri.getEncodedName());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          HBaseFsck.debugLsr(conf, p);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          boolean success = fs.delete(p, true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          HBaseFsck.debugLsr(conf, p);<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>        if (metaRow) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          try (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            Delete delete = new Delete(deleteRow);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            meta.delete(delete);<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>      LOG.info(hri.toString() + hsa.toString());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    TEST_UTIL.getMetaTableRows(htd.getTableName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    LOG.info("*** After delete:");<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    dumpMeta(htd.getTableName());<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>   * Setup a clean table before we start mucking with it.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   *<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * It will set tbl which needs to be closed after test<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @throws IOException<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @throws InterruptedException<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * @throws KeeperException<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  void setupTable(TableName tablename) throws Exception {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    setupTableWithRegionReplica(tablename, 1);<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>   * Setup a clean table with a certain region_replica count<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   *<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * It will set tbl which needs to be closed after test<a name="line.273"></a>
+<span class="sourceLineNo">230</span>    TEST_UTIL.getMetaTableRows(htd.getTableName());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    LOG.info("*** After delete:");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    dumpMeta(htd.getTableName());<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * Setup a clean table before we start mucking with it.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   *<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * It will set tbl which needs to be closed after test<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   *<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @throws IOException<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @throws InterruptedException<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @throws KeeperException<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  void setupTable(TableName tablename) throws Exception {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    setupTableWithRegionReplica(tablename, 1);<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>   * Setup a clean table with a certain region_replica count<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   *<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * It will set tbl which needs to be closed after test<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   *<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @throws Exception<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  void setupTableWithRegionReplica(TableName tablename, int replicaCount) throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    desc.setRegionReplication(replicaCount);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    for (byte[] row : ROWKEYS) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      Put p = new Put(row);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      puts.add(p);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    tbl.put(puts);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * Setup a clean table with a mob-enabled column.<a name="line.273"></a>
 <span class="sourceLineNo">274</span>   *<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @throws Exception<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  void setupTableWithRegionReplica(TableName tablename, int replicaCount) throws Exception {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    desc.setRegionReplication(replicaCount);<a name="line.279"></a>
+<span class="sourceLineNo">275</span>   * @param tablename The name of a table to be created.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @throws Exception<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  void setupMobTable(TableName tablename) throws Exception {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.279"></a>
 <span class="sourceLineNo">280</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    for (byte[] row : ROWKEYS) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      Put p = new Put(row);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      puts.add(p);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    tbl.put(puts);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Setup a clean table with a mob-enabled column.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   *<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @param tablename The name of a table to be created.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws Exception<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  void setupMobTable(TableName tablename) throws Exception {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    hcd.setMobEnabled(true);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    hcd.setMobThreshold(0);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (byte[] row : ROWKEYS) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Put p = new Put(row);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      puts.add(p);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    tbl.put(puts);<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>   * Counts the number of row to verify data loss or non-dataloss.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  int countRows() throws IOException {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>     Scan s = new Scan();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>     ResultScanner rs = tbl.getScanner(s);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>     int i = 0;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>     while(rs.next() !=null) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>       i++;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>     }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>     return i;<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>   * delete table in preparation for next test<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * @param tablename<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @throws IOException<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  void cleanupTable(TableName tablename) throws Exception {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    if (tbl != null) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      tbl.close();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      tbl = null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    ((ClusterConnection) connection).clearRegionCache();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    deleteTable(TEST_UTIL, tablename);<a name="line.344"></a>
+<span class="sourceLineNo">281</span>    hcd.setMobEnabled(true);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    hcd.setMobThreshold(0);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    for (byte[] row : ROWKEYS) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      Put p = new Put(row);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      puts.add(p);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    tbl.put(puts);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  /**<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * Counts the number of row to verify data loss or non-dataloss.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  int countRows() throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     Scan s = new Scan();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>     ResultScanner rs = tbl.getScanner(s);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>     int i = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>     while(rs.next() !=null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>       i++;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     return i;<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>   * delete table in preparation for next test<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @param tablename<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * @throws IOException<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  void cleanupTable(TableName tablename) throws Exception {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    if (tbl != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      tbl.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      tbl = null;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>    ((ClusterConnection) connection).clearRegionCache();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    deleteTable(TEST_UTIL, tablename);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * Get region info from local cluster.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(final Admin admin) throws IOException {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    ClusterStatus status = admin.getClusterStatus();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Collection&lt;ServerName&gt; regionServers = status.getServers();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    Map&lt;ServerName, List&lt;String&gt;&gt; mm =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        new HashMap&lt;ServerName, List&lt;String&gt;&gt;();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    for (ServerName hsi : regionServers) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>      // list all online regions from this region server<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      List&lt;String&gt; regionNames = new ArrayList&lt;String&gt;();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      for (HRegionInfo hri : regions) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        regionNames.add(hri.getRegionNameAsString());<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      mm.put(hsi, regionNames);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return mm;<a name="line.344"></a>
 <span class="sourceLineNo">345</span>  }<a name="line.345"></a>
 <span class="sourceLineNo">346</span><a name="line.346"></a>
 <span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * Get region info from local cluster.<a name="line.348"></a>
+<span class="sourceLineNo">348</span>   * Returns the HSI a region info is on.<a name="line.348"></a>
 <span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(final Admin admin) throws IOException {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    ClusterStatus status = admin.getClusterStatus();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    Collection&lt;ServerName&gt; regionServers = status.getServers();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    Map&lt;ServerName, List&lt;String&gt;&gt; mm =<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        new HashMap&lt;ServerName, List&lt;String&gt;&gt;();<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    for (ServerName hsi : regionServers) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>      // list all online regions from this region server<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      List&lt;String&gt; regionNames = new ArrayList&lt;String&gt;();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      for (HRegionInfo hri : regions) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        regionNames.add(hri.getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      mm.put(hsi, regionNames);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return mm;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * Returns the HSI a region info is on.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    for (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (e.getValue().contains(hri.getRegionNameAsString())) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        return e.getKey();<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>    return null;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
+<span class="sourceLineNo">350</span>  ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    for (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (e.getValue().contains(hri.getRegionNameAsString())) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        return e.getKey();<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>    return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public void deleteTableDir(TableName table) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    FileSystem fs = rootDir.getFileSystem(conf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    Path p = FSUtils.getTableDir(rootDir, table);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    HBaseFsck.debugLsr(conf, p);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    boolean success = fs.delete(p, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * We don't have an easy way to verify that a flush completed, so we loop until we find a<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * legitimate hfile and return it.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param fs<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param table<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @return Path of a flushed hfile.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @throws IOException<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  Path getFlushedHFile(FileSystem fs, TableName table) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Path tableDir= FSUtils.getTableDir(FSUtils.getRootDir(conf), table);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    Path regionDir = FSUtils.getRegionDirs(fs, tableDir).get(0);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    Path famDir = new Path(regionDir, FAM_STR);<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><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * This creates and fixes a bad table with a missing region -- hole in meta<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * and data present but .regioinfino missing (an orphan hdfs region)in the fs.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @Test (timeout=180000)<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public void testHDFSRegioninfoMissing() throws Exception {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    TableName table = TableName.valueOf("tableHDFSRegioninfoMissing");<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    try {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      setupTable(table);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.393"></a>
+<span class="sourceLineNo">381</span>    // keep doing this until we get a legit hfile<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    while (true) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      FileStatus[] hfFss = fs.listStatus(famDir);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      if (hfFss.length == 0) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        continue;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      for (FileStatus hfs : hfFss) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        if (!hfs.isDirectory()) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          return hfs.getPath();<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>    }<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>      // Mess it up by leaving a hole in the meta data<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      admin.disableTable(table);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          true, false, true, HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      admin.enableTable(table);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      assertErrors(hbck,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          new ERROR_CODE[] { ERROR_CODE.ORPHAN_HDFS_REGION, ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.403"></a>
-<span class="sourceLineNo">404</span>              ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      // holes are separate from overlap groups<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>      // fix hole<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      doFsck(conf, true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>      // check that hole fixed<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      assertNoErrors(doFsck(conf, false));<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    } finally {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      cleanupTable(table);<a name="line.415"></a>
+<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * Gets flushed mob files.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * @param fs The current file system.<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * @param table The current table name.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return Path of a flushed hfile.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * @throws IOException<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  Path getFlushedMobFile(FileSystem fs, TableName table) throws IOException {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    Path famDir = MobUtils.getMobFamilyPath(conf, table, FAM_STR);<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // keep doing this until we get a legit hfile<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    while (true) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      FileStatus[] hfFss = fs.listStatus(famDir);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if (hfFss.length == 0) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        continue;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      for (FileStatus hfs : hfFss) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if (!hfs.isDirectory()) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          return hfs.getPath();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
 <span class="sourceLineNo">416</span>    }<a name="line.416"></a>
 <span class="sourceLineNo">417</span>  }<a name="line.417"></a>
 <span class="sourceLineNo">418</span><a name="line.418"></a>
 <span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * This creates and fixes a bad table with a region that is missing meta and<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * not assigned to a region server.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  @Test (timeout=180000)<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public void testNotInMetaOrDeployedHole() throws Exception {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    TableName table =<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        TableName.valueOf("tableNotInMetaOrDeployedHole");<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    try {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      setupTable(table);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>      // Mess it up by leaving a hole in the meta data<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      admin.disableTable(table);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          true, false); // don't rm from fs<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      admin.enableTable(table);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      assertErrors(hbck,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED, ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // holes are separate from overlap groups<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>      // fix hole<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      assertErrors(doFsck(conf, true),<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED, ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // check that hole fixed<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      assertNoErrors(doFsck(conf, false));<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    } finally {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      cleanupTable(table);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<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>  @Test (timeout=180000)<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  public void testCleanUpDaughtersNotInMetaAfterFailedSplit() throws Exception {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    TableName table = TableName.valueOf("testCleanUpDaughtersNotInMetaAfterFailedSplit");<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    try {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      HTableDescriptor desc = new HTableDescriptor(table);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      desc.addFamily(new HColumnDescriptor(Bytes.toBytes("f")));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      createTable(TEST_UTIL, desc, null);<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>      tbl = connection.getTable(desc.getTableName());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (int i = 0; i &lt; 5; i++) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        Put p1 = new Put(("r" + i).getBytes());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        p1.addColumn(Bytes.toBytes("f"), "q1".getBytes(), "v".getBytes());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        tbl.put(p1);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      admin.flush(desc.getTableName());<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      List&lt;HRegion&gt; regions = cluster.getRegions(desc.getTableName());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      int serverWith = cluster.getServerWith(regions.get(0).getRegionInfo().getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      HRegionServer regionServer = cluster.getRegionServer(serverWith);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      cluster.getServerWith(regions.get(0).getRegionInfo().getRegionName());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      SplitTransactionImpl st = (SplitTransactionImpl)<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        new SplitTransactionFactory(TEST_UTIL.getConfiguration())<a name="line.476"></a>
-<span class="sourceLineNo">477</span>          .create(regions.get(0), Bytes.toBytes("r3"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      st.prepare();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      st.stepsBeforePONR(regionServer, regionServer, false);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      AssignmentManager am = cluster.getMaster().getAssignmentManager();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Map&lt;String, RegionState&gt; regionsInTransition = am.getRegionStates().getRegionsInTransition();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      for (RegionState state : regionsInTransition.values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        am.regionOffline(state.getRegion());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      Map&lt;HRegionInfo, ServerName&gt; regionsMap = new HashMap&lt;HRegionInfo, ServerName&gt;();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      regionsMap.put(regions.get(0).getRegionInfo(), regionServer.getServerName());<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      am.assign(regionsMap);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      am.waitForAssignment(regions.get(0).getRegionInfo());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          ERROR_CODE.NOT_IN_META_OR_DEPLOYED });<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      // holes are separate from overlap groups<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // fix hole<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      assertErrors(<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          doFsck(conf, false, true, false, false, false, false, false, false, false, false, false,<a name="line.497"></a>
-<span class="sourceLineNo">498</span>            null),<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.499"></a>
-<span class="sourceLineNo">500</span>              ERROR_CODE.NOT_IN_META_OR_DEPLOYED });<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>      // check that hole fixed<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      assertNoErrors(doFsck(conf, false));<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      assertEquals(5, countRows());<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    } finally {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (tbl != null) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        tbl.close();<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        tbl = null;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      cleanupTable(table);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  /**<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * This creates fixes a bad table with a hole in meta.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   */<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  @Test (timeout=180000)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public void testNotInMetaHole() throws Exception {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    TableName table =<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        TableName.valueOf("tableNotInMetaHole");<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      setupTable(table);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.523"></a>
+<span class="sourceLineNo">420</span>   * Creates a new mob file name by the old one.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @param oldFileName The old mob file name.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return The new mob file name.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  String createMobFileName(String oldFileName) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    MobFileName mobFileName = MobFileName.create(oldFileName);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    String startKey = mobFileName.getStartKey();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    String date = mobFileName.getDate();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    return MobFileName.create(startKey, date, UUID.randomUUID().toString().replaceAll("-", ""))<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      .getFileName();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span><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>
+<s

<TRUNCATED>

[05/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html b/xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
index f8ae7d0..ced1bbd 100644
--- a/xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
+++ b/xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
@@ -435,654 +435,655 @@
 <a class="jxr_linenumber" name="425" href="#425">425</a> <em class="jxr_javadoccomment">   * @param hfilesDir directory containing list of hfiles to be loaded into the table</em>
 <a class="jxr_linenumber" name="426" href="#426">426</a> <em class="jxr_javadoccomment">   * @param table table to which hfiles should be loaded</em>
 <a class="jxr_linenumber" name="427" href="#427">427</a> <em class="jxr_javadoccomment">   * @param queue queue which needs to be loaded into the table</em>
-<a class="jxr_linenumber" name="428" href="#428">428</a> <em class="jxr_javadoccomment">   * @throws IOException If any I/O or network error occurred</em>
-<a class="jxr_linenumber" name="429" href="#429">429</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="430" href="#430">430</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> prepareHFileQueue(Path hfofDir, <a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table, Deque&lt;LoadQueueItem&gt; queue,
-<a class="jxr_linenumber" name="431" href="#431">431</a>       <strong class="jxr_keyword">boolean</strong> validateHFile) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="432" href="#432">432</a>     discoverLoadQueue(queue, hfofDir, validateHFile);
-<a class="jxr_linenumber" name="433" href="#433">433</a>     validateFamiliesInHFiles(table, queue);
-<a class="jxr_linenumber" name="434" href="#434">434</a>   }
-<a class="jxr_linenumber" name="435" href="#435">435</a> 
-<a class="jxr_linenumber" name="436" href="#436">436</a>   <em class="jxr_comment">// Initialize a thread pool</em>
-<a class="jxr_linenumber" name="437" href="#437">437</a>   <strong class="jxr_keyword">private</strong> ExecutorService createExecutorService() {
-<a class="jxr_linenumber" name="438" href="#438">438</a>     ThreadFactoryBuilder builder = <strong class="jxr_keyword">new</strong> ThreadFactoryBuilder();
-<a class="jxr_linenumber" name="439" href="#439">439</a>     builder.setNameFormat(<span class="jxr_string">"LoadIncrementalHFiles-%1$d"</span>);
-<a class="jxr_linenumber" name="440" href="#440">440</a>     ExecutorService pool = <strong class="jxr_keyword">new</strong> ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,
-<a class="jxr_linenumber" name="441" href="#441">441</a>         <strong class="jxr_keyword">new</strong> LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());
-<a class="jxr_linenumber" name="442" href="#442">442</a>     ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="443" href="#443">443</a>     <strong class="jxr_keyword">return</strong> pool;
-<a class="jxr_linenumber" name="444" href="#444">444</a>   }
-<a class="jxr_linenumber" name="445" href="#445">445</a> 
-<a class="jxr_linenumber" name="446" href="#446">446</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="447" href="#447">447</a> <em class="jxr_javadoccomment">   * Checks whether there is any invalid family name in HFiles to be bulk loaded.</em>
-<a class="jxr_linenumber" name="448" href="#448">448</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="449" href="#449">449</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> validateFamiliesInHFiles(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table, Deque&lt;LoadQueueItem&gt; queue)
-<a class="jxr_linenumber" name="450" href="#450">450</a>       <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="451" href="#451">451</a>     Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();
-<a class="jxr_linenumber" name="452" href="#452">452</a>     List&lt;String&gt; familyNames = <strong class="jxr_keyword">new</strong> ArrayList&lt;String&gt;(families.size());
-<a class="jxr_linenumber" name="453" href="#453">453</a>     <strong class="jxr_keyword">for</strong> (HColumnDescriptor family : families) {
-<a class="jxr_linenumber" name="454" href="#454">454</a>       familyNames.add(family.getNameAsString());
-<a class="jxr_linenumber" name="455" href="#455">455</a>     }
-<a class="jxr_linenumber" name="456" href="#456">456</a>     List&lt;String&gt; unmatchedFamilies = <strong class="jxr_keyword">new</strong> ArrayList&lt;String&gt;();
-<a class="jxr_linenumber" name="457" href="#457">457</a>     Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();
-<a class="jxr_linenumber" name="458" href="#458">458</a>     <strong class="jxr_keyword">while</strong> (queueIter.hasNext()) {
-<a class="jxr_linenumber" name="459" href="#459">459</a>       <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html">LoadQueueItem</a> lqi = queueIter.next();
-<a class="jxr_linenumber" name="460" href="#460">460</a>       String familyNameInHFile = Bytes.toString(lqi.family);
-<a class="jxr_linenumber" name="461" href="#461">461</a>       <strong class="jxr_keyword">if</strong> (!familyNames.contains(familyNameInHFile)) {
-<a class="jxr_linenumber" name="462" href="#462">462</a>         unmatchedFamilies.add(familyNameInHFile);
-<a class="jxr_linenumber" name="463" href="#463">463</a>       }
-<a class="jxr_linenumber" name="464" href="#464">464</a>     }
-<a class="jxr_linenumber" name="465" href="#465">465</a>     <strong class="jxr_keyword">if</strong> (unmatchedFamilies.size() &gt; 0) {
-<a class="jxr_linenumber" name="466" href="#466">466</a>       String msg =
-<a class="jxr_linenumber" name="467" href="#467">467</a>           <span class="jxr_string">"Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "</span>
-<a class="jxr_linenumber" name="468" href="#468">468</a>               + unmatchedFamilies + <span class="jxr_string">"; valid family names of table "</span> + table.getName() + <span class="jxr_string">" are: "</span>
-<a class="jxr_linenumber" name="469" href="#469">469</a>               + familyNames;
-<a class="jxr_linenumber" name="470" href="#470">470</a>       LOG.error(msg);
-<a class="jxr_linenumber" name="471" href="#471">471</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(msg);
-<a class="jxr_linenumber" name="472" href="#472">472</a>     }
-<a class="jxr_linenumber" name="473" href="#473">473</a>   }
-<a class="jxr_linenumber" name="474" href="#474">474</a> 
-<a class="jxr_linenumber" name="475" href="#475">475</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="476" href="#476">476</a> <em class="jxr_javadoccomment">   * Used by the replication sink to load the hfiles from the source cluster. It does the following,</em>
-<a class="jxr_linenumber" name="477" href="#477">477</a> <em class="jxr_javadoccomment">   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.</em>
-<a class="jxr_linenumber" name="478" href="#478">478</a> <em class="jxr_javadoccomment">   * {@link</em>
-<a class="jxr_linenumber" name="479" href="#479">479</a> <em class="jxr_javadoccomment">   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}</em>
-<a class="jxr_linenumber" name="480" href="#480">480</a> <em class="jxr_javadoccomment">   * @param table Table to which these hfiles should be loaded to</em>
-<a class="jxr_linenumber" name="481" href="#481">481</a> <em class="jxr_javadoccomment">   * @param conn Connection to use</em>
-<a class="jxr_linenumber" name="482" href="#482">482</a> <em class="jxr_javadoccomment">   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded</em>
-<a class="jxr_linenumber" name="483" href="#483">483</a> <em class="jxr_javadoccomment">   * @param startEndKeys starting and ending row keys of the region</em>
-<a class="jxr_linenumber" name="484" href="#484">484</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="485" href="#485">485</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> loadHFileQueue(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> conn, Deque&lt;LoadQueueItem&gt; queue,
-<a class="jxr_linenumber" name="486" href="#486">486</a>       Pair&lt;byte[][], byte[][]&gt; startEndKeys) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="487" href="#487">487</a>     ExecutorService pool = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="488" href="#488">488</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="489" href="#489">489</a>       pool = createExecutorService();
-<a class="jxr_linenumber" name="490" href="#490">490</a>       Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =
-<a class="jxr_linenumber" name="491" href="#491">491</a>           groupOrSplitPhase(table, pool, queue, startEndKeys);
-<a class="jxr_linenumber" name="492" href="#492">492</a>       bulkLoadPhase(table, conn, pool, queue, regionGroups);
-<a class="jxr_linenumber" name="493" href="#493">493</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="494" href="#494">494</a>       <strong class="jxr_keyword">if</strong> (pool != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="495" href="#495">495</a>         pool.shutdown();
-<a class="jxr_linenumber" name="496" href="#496">496</a>       }
-<a class="jxr_linenumber" name="497" href="#497">497</a>     }
-<a class="jxr_linenumber" name="498" href="#498">498</a>   }
-<a class="jxr_linenumber" name="499" href="#499">499</a> 
-<a class="jxr_linenumber" name="500" href="#500">500</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="501" href="#501">501</a> <em class="jxr_javadoccomment">   * This takes the LQI's grouped by likely regions and attempts to bulk load</em>
-<a class="jxr_linenumber" name="502" href="#502">502</a> <em class="jxr_javadoccomment">   * them.  Any failures are re-queued for another pass with the</em>
-<a class="jxr_linenumber" name="503" href="#503">503</a> <em class="jxr_javadoccomment">   * groupOrSplitPhase.</em>
-<a class="jxr_linenumber" name="504" href="#504">504</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="505" href="#505">505</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> bulkLoadPhase(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> conn,
-<a class="jxr_linenumber" name="506" href="#506">506</a>       ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,
-<a class="jxr_linenumber" name="507" href="#507">507</a>       <strong class="jxr_keyword">final</strong> Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="508" href="#508">508</a>     <em class="jxr_comment">// atomically bulk load the groups.</em>
-<a class="jxr_linenumber" name="509" href="#509">509</a>     Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = <strong class="jxr_keyword">new</strong> HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();
-<a class="jxr_linenumber" name="510" href="#510">510</a>     <strong class="jxr_keyword">for</strong> (Entry&lt;ByteBuffer, ? <strong class="jxr_keyword">extends</strong> Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){
-<a class="jxr_linenumber" name="511" href="#511">511</a>       <strong class="jxr_keyword">final</strong> byte[] first = e.getKey().array();
-<a class="jxr_linenumber" name="512" href="#512">512</a>       <strong class="jxr_keyword">final</strong> Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();
-<a class="jxr_linenumber" name="513" href="#513">513</a> 
-<a class="jxr_linenumber" name="514" href="#514">514</a>       <strong class="jxr_keyword">final</strong> Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = <strong class="jxr_keyword">new</strong> Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {
-<a class="jxr_linenumber" name="515" href="#515">515</a>         @Override
-<a class="jxr_linenumber" name="516" href="#516">516</a>         <strong class="jxr_keyword">public</strong> List&lt;LoadQueueItem&gt; call() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="517" href="#517">517</a>           List&lt;LoadQueueItem&gt; toRetry =
-<a class="jxr_linenumber" name="518" href="#518">518</a>               tryAtomicRegionLoad(conn, table.getName(), first, lqis);
-<a class="jxr_linenumber" name="519" href="#519">519</a>           <strong class="jxr_keyword">return</strong> toRetry;
-<a class="jxr_linenumber" name="520" href="#520">520</a>         }
-<a class="jxr_linenumber" name="521" href="#521">521</a>       };
-<a class="jxr_linenumber" name="522" href="#522">522</a>       loadingFutures.add(pool.submit(call));
-<a class="jxr_linenumber" name="523" href="#523">523</a>     }
-<a class="jxr_linenumber" name="524" href="#524">524</a> 
-<a class="jxr_linenumber" name="525" href="#525">525</a>     <em class="jxr_comment">// get all the results.</em>
-<a class="jxr_linenumber" name="526" href="#526">526</a>     <strong class="jxr_keyword">for</strong> (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {
-<a class="jxr_linenumber" name="527" href="#527">527</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="528" href="#528">528</a>         List&lt;LoadQueueItem&gt; toRetry = future.get();
-<a class="jxr_linenumber" name="529" href="#529">529</a> 
-<a class="jxr_linenumber" name="530" href="#530">530</a>         <em class="jxr_comment">// LQIs that are requeued to be regrouped.</em>
-<a class="jxr_linenumber" name="531" href="#531">531</a>         queue.addAll(toRetry);
-<a class="jxr_linenumber" name="532" href="#532">532</a> 
-<a class="jxr_linenumber" name="533" href="#533">533</a>       } <strong class="jxr_keyword">catch</strong> (ExecutionException e1) {
-<a class="jxr_linenumber" name="534" href="#534">534</a>         Throwable t = e1.getCause();
-<a class="jxr_linenumber" name="535" href="#535">535</a>         <strong class="jxr_keyword">if</strong> (t instanceof IOException) {
-<a class="jxr_linenumber" name="536" href="#536">536</a>           <em class="jxr_comment">// At this point something unrecoverable has happened.</em>
-<a class="jxr_linenumber" name="537" href="#537">537</a>           <em class="jxr_comment">// TODO Implement bulk load recovery</em>
-<a class="jxr_linenumber" name="538" href="#538">538</a>           <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"BulkLoad encountered an unrecoverable problem"</span>, t);
-<a class="jxr_linenumber" name="539" href="#539">539</a>         }
-<a class="jxr_linenumber" name="540" href="#540">540</a>         LOG.error(<span class="jxr_string">"Unexpected execution exception during bulk load"</span>, e1);
-<a class="jxr_linenumber" name="541" href="#541">541</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(t);
-<a class="jxr_linenumber" name="542" href="#542">542</a>       } <strong class="jxr_keyword">catch</strong> (InterruptedException e1) {
-<a class="jxr_linenumber" name="543" href="#543">543</a>         LOG.error(<span class="jxr_string">"Unexpected interrupted exception during bulk load"</span>, e1);
-<a class="jxr_linenumber" name="544" href="#544">544</a>         <strong class="jxr_keyword">throw</strong> (InterruptedIOException)<strong class="jxr_keyword">new</strong> InterruptedIOException().initCause(e1);
-<a class="jxr_linenumber" name="545" href="#545">545</a>       }
-<a class="jxr_linenumber" name="546" href="#546">546</a>     }
-<a class="jxr_linenumber" name="547" href="#547">547</a>   }
-<a class="jxr_linenumber" name="548" href="#548">548</a> 
-<a class="jxr_linenumber" name="549" href="#549">549</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> checkHFilesCountPerRegionPerFamily(
-<a class="jxr_linenumber" name="550" href="#550">550</a>       <strong class="jxr_keyword">final</strong> Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {
-<a class="jxr_linenumber" name="551" href="#551">551</a>     <strong class="jxr_keyword">for</strong> (Entry&lt;ByteBuffer,
-<a class="jxr_linenumber" name="552" href="#552">552</a>         ? <strong class="jxr_keyword">extends</strong> Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {
-<a class="jxr_linenumber" name="553" href="#553">553</a>       <strong class="jxr_keyword">final</strong> Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();
-<a class="jxr_linenumber" name="554" href="#554">554</a>       HashMap&lt;byte[], MutableInt&gt; filesMap = <strong class="jxr_keyword">new</strong> HashMap&lt;byte[], MutableInt&gt;();
-<a class="jxr_linenumber" name="555" href="#555">555</a>       <strong class="jxr_keyword">for</strong> (LoadQueueItem lqi: lqis) {
-<a class="jxr_linenumber" name="556" href="#556">556</a>         MutableInt count = filesMap.get(lqi.family);
-<a class="jxr_linenumber" name="557" href="#557">557</a>         <strong class="jxr_keyword">if</strong> (count == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="558" href="#558">558</a>           count = <strong class="jxr_keyword">new</strong> MutableInt();
-<a class="jxr_linenumber" name="559" href="#559">559</a>           filesMap.put(lqi.family, count);
-<a class="jxr_linenumber" name="560" href="#560">560</a>         }
-<a class="jxr_linenumber" name="561" href="#561">561</a>         count.increment();
-<a class="jxr_linenumber" name="562" href="#562">562</a>         <strong class="jxr_keyword">if</strong> (count.intValue() &gt; maxFilesPerRegionPerFamily) {
-<a class="jxr_linenumber" name="563" href="#563">563</a>           LOG.error(<span class="jxr_string">"Trying to load more than "</span> + maxFilesPerRegionPerFamily
-<a class="jxr_linenumber" name="564" href="#564">564</a>             + <span class="jxr_string">" hfiles to family "</span> + Bytes.toStringBinary(lqi.family)
-<a class="jxr_linenumber" name="565" href="#565">565</a>             + <span class="jxr_string">" of region with start key "</span>
-<a class="jxr_linenumber" name="566" href="#566">566</a>             + Bytes.toStringBinary(e.getKey()));
-<a class="jxr_linenumber" name="567" href="#567">567</a>           <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="568" href="#568">568</a>         }
-<a class="jxr_linenumber" name="569" href="#569">569</a>       }
-<a class="jxr_linenumber" name="570" href="#570">570</a>     }
-<a class="jxr_linenumber" name="571" href="#571">571</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="572" href="#572">572</a>   }
-<a class="jxr_linenumber" name="573" href="#573">573</a> 
-<a class="jxr_linenumber" name="574" href="#574">574</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="575" href="#575">575</a> <em class="jxr_javadoccomment">   * @return A map that groups LQI by likely bulk load region targets.</em>
-<a class="jxr_linenumber" name="576" href="#576">576</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="577" href="#577">577</a>   <strong class="jxr_keyword">private</strong> Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table,
-<a class="jxr_linenumber" name="578" href="#578">578</a>       ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,
-<a class="jxr_linenumber" name="579" href="#579">579</a>       <strong class="jxr_keyword">final</strong> Pair&lt;byte[][], byte[][]&gt; startEndKeys) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="580" href="#580">580</a>     <em class="jxr_comment">// &lt;region start key, LQI&gt; need synchronized only within this scope of this</em>
-<a class="jxr_linenumber" name="581" href="#581">581</a>     <em class="jxr_comment">// phase because of the puts that happen in futures.</em>
-<a class="jxr_linenumber" name="582" href="#582">582</a>     Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();
-<a class="jxr_linenumber" name="583" href="#583">583</a>     <strong class="jxr_keyword">final</strong> Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);
-<a class="jxr_linenumber" name="584" href="#584">584</a> 
-<a class="jxr_linenumber" name="585" href="#585">585</a>     <em class="jxr_comment">// drain LQIs and figure out bulk load groups</em>
-<a class="jxr_linenumber" name="586" href="#586">586</a>     Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = <strong class="jxr_keyword">new</strong> HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();
-<a class="jxr_linenumber" name="587" href="#587">587</a>     <strong class="jxr_keyword">while</strong> (!queue.isEmpty()) {
-<a class="jxr_linenumber" name="588" href="#588">588</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html">LoadQueueItem</a> item = queue.remove();
-<a class="jxr_linenumber" name="589" href="#589">589</a> 
-<a class="jxr_linenumber" name="590" href="#590">590</a>       <strong class="jxr_keyword">final</strong> Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = <strong class="jxr_keyword">new</strong> Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {
-<a class="jxr_linenumber" name="591" href="#591">591</a>         @Override
-<a class="jxr_linenumber" name="592" href="#592">592</a>         <strong class="jxr_keyword">public</strong> List&lt;LoadQueueItem&gt; call() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="593" href="#593">593</a>           List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);
-<a class="jxr_linenumber" name="594" href="#594">594</a>           <strong class="jxr_keyword">return</strong> splits;
-<a class="jxr_linenumber" name="595" href="#595">595</a>         }
-<a class="jxr_linenumber" name="596" href="#596">596</a>       };
-<a class="jxr_linenumber" name="597" href="#597">597</a>       splittingFutures.add(pool.submit(call));
-<a class="jxr_linenumber" name="598" href="#598">598</a>     }
-<a class="jxr_linenumber" name="599" href="#599">599</a>     <em class="jxr_comment">// get all the results.  All grouping and splitting must finish before</em>
-<a class="jxr_linenumber" name="600" href="#600">600</a>     <em class="jxr_comment">// we can attempt the atomic loads.</em>
-<a class="jxr_linenumber" name="601" href="#601">601</a>     <strong class="jxr_keyword">for</strong> (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {
-<a class="jxr_linenumber" name="602" href="#602">602</a>       <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="603" href="#603">603</a>         List&lt;LoadQueueItem&gt; splits = lqis.get();
-<a class="jxr_linenumber" name="604" href="#604">604</a>         <strong class="jxr_keyword">if</strong> (splits != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="605" href="#605">605</a>           queue.addAll(splits);
-<a class="jxr_linenumber" name="606" href="#606">606</a>         }
-<a class="jxr_linenumber" name="607" href="#607">607</a>       } <strong class="jxr_keyword">catch</strong> (ExecutionException e1) {
-<a class="jxr_linenumber" name="608" href="#608">608</a>         Throwable t = e1.getCause();
-<a class="jxr_linenumber" name="609" href="#609">609</a>         <strong class="jxr_keyword">if</strong> (t instanceof IOException) {
-<a class="jxr_linenumber" name="610" href="#610">610</a>           LOG.error(<span class="jxr_string">"IOException during splitting"</span>, e1);
-<a class="jxr_linenumber" name="611" href="#611">611</a>           <strong class="jxr_keyword">throw</strong> (IOException)t; <em class="jxr_comment">// would have been thrown if not parallelized,</em>
-<a class="jxr_linenumber" name="612" href="#612">612</a>         }
-<a class="jxr_linenumber" name="613" href="#613">613</a>         LOG.error(<span class="jxr_string">"Unexpected execution exception during splitting"</span>, e1);
-<a class="jxr_linenumber" name="614" href="#614">614</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalStateException(t);
-<a class="jxr_linenumber" name="615" href="#615">615</a>       } <strong class="jxr_keyword">catch</strong> (InterruptedException e1) {
-<a class="jxr_linenumber" name="616" href="#616">616</a>         LOG.error(<span class="jxr_string">"Unexpected interrupted exception during splitting"</span>, e1);
-<a class="jxr_linenumber" name="617" href="#617">617</a>         <strong class="jxr_keyword">throw</strong> (InterruptedIOException)<strong class="jxr_keyword">new</strong> InterruptedIOException().initCause(e1);
-<a class="jxr_linenumber" name="618" href="#618">618</a>       }
-<a class="jxr_linenumber" name="619" href="#619">619</a>     }
-<a class="jxr_linenumber" name="620" href="#620">620</a>     <strong class="jxr_keyword">return</strong> regionGroups;
-<a class="jxr_linenumber" name="621" href="#621">621</a>   }
-<a class="jxr_linenumber" name="622" href="#622">622</a> 
-<a class="jxr_linenumber" name="623" href="#623">623</a>   <em class="jxr_comment">// unique file name for the table</em>
-<a class="jxr_linenumber" name="624" href="#624">624</a>   <strong class="jxr_keyword">private</strong> String getUniqueName() {
-<a class="jxr_linenumber" name="625" href="#625">625</a>     <strong class="jxr_keyword">return</strong> UUID.randomUUID().toString().replaceAll(<span class="jxr_string">"-"</span>, <span class="jxr_string">""</span>);
-<a class="jxr_linenumber" name="626" href="#626">626</a>   }
-<a class="jxr_linenumber" name="627" href="#627">627</a> 
-<a class="jxr_linenumber" name="628" href="#628">628</a>   <strong class="jxr_keyword">protected</strong> List&lt;LoadQueueItem&gt; splitStoreFile(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html">LoadQueueItem</a> item,
-<a class="jxr_linenumber" name="629" href="#629">629</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table, byte[] startKey,
-<a class="jxr_linenumber" name="630" href="#630">630</a>       byte[] splitKey) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="631" href="#631">631</a>     <strong class="jxr_keyword">final</strong> Path hfilePath = item.hfilePath;
-<a class="jxr_linenumber" name="632" href="#632">632</a> 
-<a class="jxr_linenumber" name="633" href="#633">633</a>     <em class="jxr_comment">// We use a '_' prefix which is ignored when walking directory trees</em>
-<a class="jxr_linenumber" name="634" href="#634">634</a>     <em class="jxr_comment">// above.</em>
-<a class="jxr_linenumber" name="635" href="#635">635</a>     <strong class="jxr_keyword">final</strong> String TMP_DIR = <span class="jxr_string">"_tmp"</span>;
-<a class="jxr_linenumber" name="636" href="#636">636</a>     Path tmpDir = item.hfilePath.getParent();
-<a class="jxr_linenumber" name="637" href="#637">637</a>     <strong class="jxr_keyword">if</strong> (!tmpDir.getName().equals(TMP_DIR)) {
-<a class="jxr_linenumber" name="638" href="#638">638</a>       tmpDir = <strong class="jxr_keyword">new</strong> Path(tmpDir, TMP_DIR);
-<a class="jxr_linenumber" name="639" href="#639">639</a>     }
-<a class="jxr_linenumber" name="640" href="#640">640</a> 
-<a class="jxr_linenumber" name="641" href="#641">641</a>     LOG.info(<span class="jxr_string">"HFile at "</span> + hfilePath + <span class="jxr_string">" no longer fits inside a single "</span> +
-<a class="jxr_linenumber" name="642" href="#642">642</a>     <span class="jxr_string">"region. Splitting..."</span>);
-<a class="jxr_linenumber" name="643" href="#643">643</a> 
-<a class="jxr_linenumber" name="644" href="#644">644</a>     String uniqueName = getUniqueName();
-<a class="jxr_linenumber" name="645" href="#645">645</a>     <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> familyDesc = table.getTableDescriptor().getFamily(item.family);
-<a class="jxr_linenumber" name="646" href="#646">646</a> 
-<a class="jxr_linenumber" name="647" href="#647">647</a>     Path botOut = <strong class="jxr_keyword">new</strong> Path(tmpDir, uniqueName + <span class="jxr_string">".bottom"</span>);
-<a class="jxr_linenumber" name="648" href="#648">648</a>     Path topOut = <strong class="jxr_keyword">new</strong> Path(tmpDir, uniqueName + <span class="jxr_string">".top"</span>);
-<a class="jxr_linenumber" name="649" href="#649">649</a>     splitStoreFile(getConf(), hfilePath, familyDesc, splitKey, botOut, topOut);
-<a class="jxr_linenumber" name="650" href="#650">650</a> 
-<a class="jxr_linenumber" name="651" href="#651">651</a>     FileSystem fs = tmpDir.getFileSystem(getConf());
-<a class="jxr_linenumber" name="652" href="#652">652</a>     fs.setPermission(tmpDir, FsPermission.valueOf(<span class="jxr_string">"-rwxrwxrwx"</span>));
-<a class="jxr_linenumber" name="653" href="#653">653</a>     fs.setPermission(botOut, FsPermission.valueOf(<span class="jxr_string">"-rwxrwxrwx"</span>));
-<a class="jxr_linenumber" name="654" href="#654">654</a>     fs.setPermission(topOut, FsPermission.valueOf(<span class="jxr_string">"-rwxrwxrwx"</span>));
-<a class="jxr_linenumber" name="655" href="#655">655</a> 
-<a class="jxr_linenumber" name="656" href="#656">656</a>     <em class="jxr_comment">// Add these back at the *front* of the queue, so there's a lower</em>
-<a class="jxr_linenumber" name="657" href="#657">657</a>     <em class="jxr_comment">// chance that the region will just split again before we get there.</em>
-<a class="jxr_linenumber" name="658" href="#658">658</a>     List&lt;LoadQueueItem&gt; lqis = <strong class="jxr_keyword">new</strong> ArrayList&lt;LoadQueueItem&gt;(2);
-<a class="jxr_linenumber" name="659" href="#659">659</a>     lqis.add(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html">LoadQueueItem</a>(item.family, botOut));
-<a class="jxr_linenumber" name="660" href="#660">660</a>     lqis.add(<strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html">LoadQueueItem</a>(item.family, topOut));
-<a class="jxr_linenumber" name="661" href="#661">661</a> 
-<a class="jxr_linenumber" name="662" href="#662">662</a>     LOG.info(<span class="jxr_string">"Successfully split into new HFiles "</span> + botOut + <span class="jxr_string">" and "</span> + topOut);
-<a class="jxr_linenumber" name="663" href="#663">663</a>     <strong class="jxr_keyword">return</strong> lqis;
-<a class="jxr_linenumber" name="664" href="#664">664</a>   }
-<a class="jxr_linenumber" name="665" href="#665">665</a> 
-<a class="jxr_linenumber" name="666" href="#666">666</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="667" href="#667">667</a> <em class="jxr_javadoccomment">   * Attempt to assign the given load queue item into its target region group.</em>
-<a class="jxr_linenumber" name="668" href="#668">668</a> <em class="jxr_javadoccomment">   * If the hfile boundary no longer fits into a region, physically splits</em>
-<a class="jxr_linenumber" name="669" href="#669">669</a> <em class="jxr_javadoccomment">   * the hfile such that the new bottom half will fit and returns the list of</em>
-<a class="jxr_linenumber" name="670" href="#670">670</a> <em class="jxr_javadoccomment">   * LQI's corresponding to the resultant hfiles.</em>
-<a class="jxr_linenumber" name="671" href="#671">671</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="672" href="#672">672</a> <em class="jxr_javadoccomment">   * protected for testing</em>
-<a class="jxr_linenumber" name="673" href="#673">673</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="674" href="#674">674</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="675" href="#675">675</a>   <strong class="jxr_keyword">protected</strong> List&lt;LoadQueueItem&gt; groupOrSplit(Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups,
-<a class="jxr_linenumber" name="676" href="#676">676</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html">LoadQueueItem</a> item, <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table,
-<a class="jxr_linenumber" name="677" href="#677">677</a>       <strong class="jxr_keyword">final</strong> Pair&lt;byte[][], byte[][]&gt; startEndKeys)
-<a class="jxr_linenumber" name="678" href="#678">678</a>       <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="679" href="#679">679</a>     <strong class="jxr_keyword">final</strong> Path hfilePath = item.hfilePath;
-<a class="jxr_linenumber" name="680" href="#680">680</a>     <em class="jxr_comment">// fs is the source filesystem</em>
-<a class="jxr_linenumber" name="681" href="#681">681</a>     <strong class="jxr_keyword">if</strong> (fs == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="682" href="#682">682</a>       fs = hfilePath.getFileSystem(getConf());
-<a class="jxr_linenumber" name="683" href="#683">683</a>     }
-<a class="jxr_linenumber" name="684" href="#684">684</a>     HFile.Reader hfr = HFile.createReader(fs, hfilePath,
-<a class="jxr_linenumber" name="685" href="#685">685</a>         <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html">CacheConfig</a>(getConf()), getConf());
-<a class="jxr_linenumber" name="686" href="#686">686</a>     <strong class="jxr_keyword">final</strong> byte[] first, last;
-<a class="jxr_linenumber" name="687" href="#687">687</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="688" href="#688">688</a>       hfr.loadFileInfo();
-<a class="jxr_linenumber" name="689" href="#689">689</a>       first = hfr.getFirstRowKey();
-<a class="jxr_linenumber" name="690" href="#690">690</a>       last = hfr.getLastRowKey();
-<a class="jxr_linenumber" name="691" href="#691">691</a>     }  <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="692" href="#692">692</a>       hfr.close();
-<a class="jxr_linenumber" name="693" href="#693">693</a>     }
-<a class="jxr_linenumber" name="694" href="#694">694</a> 
-<a class="jxr_linenumber" name="695" href="#695">695</a>     LOG.info(<span class="jxr_string">"Trying to load hfile="</span> + hfilePath +
-<a class="jxr_linenumber" name="696" href="#696">696</a>         <span class="jxr_string">" first="</span> + Bytes.toStringBinary(first) +
-<a class="jxr_linenumber" name="697" href="#697">697</a>         <span class="jxr_string">" last="</span>  + Bytes.toStringBinary(last));
-<a class="jxr_linenumber" name="698" href="#698">698</a>     <strong class="jxr_keyword">if</strong> (first == <strong class="jxr_keyword">null</strong> || last == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="699" href="#699">699</a>       assert first == <strong class="jxr_keyword">null</strong> &amp;&amp; last == <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="700" href="#700">700</a>       <em class="jxr_comment">// TODO what if this is due to a bad HFile?</em>
-<a class="jxr_linenumber" name="701" href="#701">701</a>       LOG.info(<span class="jxr_string">"hfile "</span> + hfilePath + <span class="jxr_string">" has no entries, skipping"</span>);
-<a class="jxr_linenumber" name="702" href="#702">702</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="703" href="#703">703</a>     }
-<a class="jxr_linenumber" name="704" href="#704">704</a>     <strong class="jxr_keyword">if</strong> (Bytes.compareTo(first, last) &gt; 0) {
-<a class="jxr_linenumber" name="705" href="#705">705</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IllegalArgumentException(
-<a class="jxr_linenumber" name="706" href="#706">706</a>       <span class="jxr_string">"Invalid range: "</span> + Bytes.toStringBinary(first) +
-<a class="jxr_linenumber" name="707" href="#707">707</a>       <span class="jxr_string">" &gt; "</span> + Bytes.toStringBinary(last));
-<a class="jxr_linenumber" name="708" href="#708">708</a>     }
-<a class="jxr_linenumber" name="709" href="#709">709</a>     <strong class="jxr_keyword">int</strong> idx = Arrays.binarySearch(startEndKeys.getFirst(), first,
-<a class="jxr_linenumber" name="710" href="#710">710</a>         Bytes.BYTES_COMPARATOR);
-<a class="jxr_linenumber" name="711" href="#711">711</a>     <strong class="jxr_keyword">if</strong> (idx &lt; 0) {
-<a class="jxr_linenumber" name="712" href="#712">712</a>       <em class="jxr_comment">// not on boundary, returns -(insertion index).  Calculate region it</em>
-<a class="jxr_linenumber" name="713" href="#713">713</a>       <em class="jxr_comment">// would be in.</em>
-<a class="jxr_linenumber" name="714" href="#714">714</a>       idx = -(idx + 1) - 1;
-<a class="jxr_linenumber" name="715" href="#715">715</a>     }
-<a class="jxr_linenumber" name="716" href="#716">716</a>     <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> indexForCallable = idx;
-<a class="jxr_linenumber" name="717" href="#717">717</a> 
-<a class="jxr_linenumber" name="718" href="#718">718</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="719" href="#719">719</a> <em class="jxr_javadoccomment">     * we can consider there is a region hole in following conditions. 1) if idx &lt; 0,then first</em>
-<a class="jxr_linenumber" name="720" href="#720">720</a> <em class="jxr_javadoccomment">     * region info is lost. 2) if the endkey of a region is not equal to the startkey of the next</em>
-<a class="jxr_linenumber" name="721" href="#721">721</a> <em class="jxr_javadoccomment">     * region. 3) if the endkey of the last region is not empty.</em>
-<a class="jxr_linenumber" name="722" href="#722">722</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="723" href="#723">723</a>     <strong class="jxr_keyword">if</strong> (indexForCallable &lt; 0) {
-<a class="jxr_linenumber" name="724" href="#724">724</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"The first region info for table "</span>
-<a class="jxr_linenumber" name="725" href="#725">725</a>           + table.getName()
-<a class="jxr_linenumber" name="726" href="#726">726</a>           + <span class="jxr_string">" cann't be found in hbase:meta.Please use hbck tool to fix it first."</span>);
-<a class="jxr_linenumber" name="727" href="#727">727</a>     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> ((indexForCallable == startEndKeys.getFirst().length - 1)
-<a class="jxr_linenumber" name="728" href="#728">728</a>         &amp;&amp; !Bytes.equals(startEndKeys.getSecond()[indexForCallable], HConstants.EMPTY_BYTE_ARRAY)) {
-<a class="jxr_linenumber" name="729" href="#729">729</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"The last region info for table "</span>
-<a class="jxr_linenumber" name="730" href="#730">730</a>           + table.getName()
-<a class="jxr_linenumber" name="731" href="#731">731</a>           + <span class="jxr_string">" cann't be found in hbase:meta.Please use hbck tool to fix it first."</span>);
-<a class="jxr_linenumber" name="732" href="#732">732</a>     } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (indexForCallable + 1 &lt; startEndKeys.getFirst().length
-<a class="jxr_linenumber" name="733" href="#733">733</a>         &amp;&amp; !(Bytes.compareTo(startEndKeys.getSecond()[indexForCallable],
-<a class="jxr_linenumber" name="734" href="#734">734</a>           startEndKeys.getFirst()[indexForCallable + 1]) == 0)) {
-<a class="jxr_linenumber" name="735" href="#735">735</a>       <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"The endkey of one region for table "</span>
-<a class="jxr_linenumber" name="736" href="#736">736</a>           + table.getName()
-<a class="jxr_linenumber" name="737" href="#737">737</a>           + <span class="jxr_string">" is not equal to the startkey of the next region in hbase:meta."</span>
-<a class="jxr_linenumber" name="738" href="#738">738</a>           + <span class="jxr_string">"Please use hbck tool to fix it first."</span>);
-<a class="jxr_linenumber" name="739" href="#739">739</a>     }
-<a class="jxr_linenumber" name="740" href="#740">740</a> 
-<a class="jxr_linenumber" name="741" href="#741">741</a>     <strong class="jxr_keyword">boolean</strong> lastKeyInRange =
-<a class="jxr_linenumber" name="742" href="#742">742</a>       Bytes.compareTo(last, startEndKeys.getSecond()[idx]) &lt; 0 ||
-<a class="jxr_linenumber" name="743" href="#743">743</a>       Bytes.equals(startEndKeys.getSecond()[idx], HConstants.EMPTY_BYTE_ARRAY);
-<a class="jxr_linenumber" name="744" href="#744">744</a>     <strong class="jxr_keyword">if</strong> (!lastKeyInRange) {
-<a class="jxr_linenumber" name="745" href="#745">745</a>       List&lt;LoadQueueItem&gt; lqis = splitStoreFile(item, table,
-<a class="jxr_linenumber" name="746" href="#746">746</a>           startEndKeys.getFirst()[indexForCallable],
-<a class="jxr_linenumber" name="747" href="#747">747</a>           startEndKeys.getSecond()[indexForCallable]);
-<a class="jxr_linenumber" name="748" href="#748">748</a>       <strong class="jxr_keyword">return</strong> lqis;
-<a class="jxr_linenumber" name="749" href="#749">749</a>     }
-<a class="jxr_linenumber" name="750" href="#750">750</a> 
-<a class="jxr_linenumber" name="751" href="#751">751</a>     <em class="jxr_comment">// group regions.</em>
-<a class="jxr_linenumber" name="752" href="#752">752</a>     regionGroups.put(ByteBuffer.wrap(startEndKeys.getFirst()[idx]), item);
-<a class="jxr_linenumber" name="753" href="#753">753</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="754" href="#754">754</a>   }
-<a class="jxr_linenumber" name="755" href="#755">755</a> 
-<a class="jxr_linenumber" name="756" href="#756">756</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="757" href="#757">757</a> <em class="jxr_javadoccomment">   * Attempts to do an atomic load of many hfiles into a region.  If it fails,</em>
-<a class="jxr_linenumber" name="758" href="#758">758</a> <em class="jxr_javadoccomment">   * it returns a list of hfiles that need to be retried.  If it is successful</em>
-<a class="jxr_linenumber" name="759" href="#759">759</a> <em class="jxr_javadoccomment">   * it will return an empty list.</em>
-<a class="jxr_linenumber" name="760" href="#760">760</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="761" href="#761">761</a> <em class="jxr_javadoccomment">   * NOTE: To maintain row atomicity guarantees, region server callable should</em>
-<a class="jxr_linenumber" name="762" href="#762">762</a> <em class="jxr_javadoccomment">   * succeed atomically and fails atomically.</em>
-<a class="jxr_linenumber" name="763" href="#763">763</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="764" href="#764">764</a> <em class="jxr_javadoccomment">   * Protected for testing.</em>
-<a class="jxr_linenumber" name="765" href="#765">765</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="766" href="#766">766</a> <em class="jxr_javadoccomment">   * @return empty list if success, list of items to retry on recoverable</em>
-<a class="jxr_linenumber" name="767" href="#767">767</a> <em class="jxr_javadoccomment">   * failure</em>
-<a class="jxr_linenumber" name="768" href="#768">768</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="769" href="#769">769</a>   <strong class="jxr_keyword">protected</strong> List&lt;LoadQueueItem&gt; tryAtomicRegionLoad(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html">Connection</a> conn,
-<a class="jxr_linenumber" name="770" href="#770">770</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/TableName.html">TableName</a> tableName, <strong class="jxr_keyword">final</strong> byte[] first, <strong class="jxr_keyword">final</strong> Collection&lt;LoadQueueItem&gt; lqis)
-<a class="jxr_linenumber" name="771" href="#771">771</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="772" href="#772">772</a>     <strong class="jxr_keyword">final</strong> List&lt;Pair&lt;byte[], String&gt;&gt; famPaths =
-<a class="jxr_linenumber" name="773" href="#773">773</a>       <strong class="jxr_keyword">new</strong> ArrayList&lt;Pair&lt;byte[], String&gt;&gt;(lqis.size());
-<a class="jxr_linenumber" name="774" href="#774">774</a>     <strong class="jxr_keyword">for</strong> (LoadQueueItem lqi : lqis) {
-<a class="jxr_linenumber" name="775" href="#775">775</a>       famPaths.add(Pair.newPair(lqi.family, lqi.hfilePath.toString()));
-<a class="jxr_linenumber" name="776" href="#776">776</a>     }
-<a class="jxr_linenumber" name="777" href="#777">777</a> 
-<a class="jxr_linenumber" name="778" href="#778">778</a>     <strong class="jxr_keyword">final</strong> RegionServerCallable&lt;Boolean&gt; svrCallable =
-<a class="jxr_linenumber" name="779" href="#779">779</a>         <strong class="jxr_keyword">new</strong> RegionServerCallable&lt;Boolean&gt;(conn, tableName, first) {
-<a class="jxr_linenumber" name="780" href="#780">780</a>       @Override
-<a class="jxr_linenumber" name="781" href="#781">781</a>       <strong class="jxr_keyword">public</strong> Boolean call(<strong class="jxr_keyword">int</strong> callTimeout) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="782" href="#782">782</a>         <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/SecureBulkLoadClient.html">SecureBulkLoadClient</a> secureClient = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="783" href="#783">783</a>         <strong class="jxr_keyword">boolean</strong> success = false;
-<a class="jxr_linenumber" name="784" href="#784">784</a> 
-<a class="jxr_linenumber" name="785" href="#785">785</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="786" href="#786">786</a>           LOG.debug(<span class="jxr_string">"Going to connect to server "</span> + getLocation() + <span class="jxr_string">" for row "</span>
-<a class="jxr_linenumber" name="787" href="#787">787</a>               + Bytes.toStringBinary(getRow()) + <span class="jxr_string">" with hfile group "</span> + famPaths);
-<a class="jxr_linenumber" name="788" href="#788">788</a>           byte[] regionName = getLocation().getRegionInfo().getRegionName();
-<a class="jxr_linenumber" name="789" href="#789">789</a>           <strong class="jxr_keyword">if</strong> (!isSecureBulkLoadEndpointAvailable()) {
-<a class="jxr_linenumber" name="790" href="#790">790</a>             success = ProtobufUtil.bulkLoadHFile(getStub(), famPaths, regionName, assignSeqIds);
-<a class="jxr_linenumber" name="791" href="#791">791</a>           } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="792" href="#792">792</a>             <strong class="jxr_keyword">try</strong> (Table table = conn.getTable(getTableName())) {
-<a class="jxr_linenumber" name="793" href="#793">793</a>               secureClient = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/SecureBulkLoadClient.html">SecureBulkLoadClient</a>(table);
-<a class="jxr_linenumber" name="794" href="#794">794</a>               success = secureClient.bulkLoadHFiles(famPaths, fsDelegationToken.getUserToken(),
-<a class="jxr_linenumber" name="795" href="#795">795</a>                 bulkToken, getLocation().getRegionInfo().getStartKey());
-<a class="jxr_linenumber" name="796" href="#796">796</a>             }
-<a class="jxr_linenumber" name="797" href="#797">797</a>           }
-<a class="jxr_linenumber" name="798" href="#798">798</a>           <strong class="jxr_keyword">return</strong> success;
-<a class="jxr_linenumber" name="799" href="#799">799</a>         } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="800" href="#800">800</a>           <em class="jxr_comment">//Best effort copying of files that might not have been imported</em>
-<a class="jxr_linenumber" name="801" href="#801">801</a>           <em class="jxr_comment">//from the staging directory back to original location</em>
-<a class="jxr_linenumber" name="802" href="#802">802</a>           <em class="jxr_comment">//in user directory</em>
-<a class="jxr_linenumber" name="803" href="#803">803</a>           <strong class="jxr_keyword">if</strong>(secureClient != <strong class="jxr_keyword">null</strong> &amp;&amp; !success) {
-<a class="jxr_linenumber" name="804" href="#804">804</a>             FileSystem targetFs = FileSystem.get(getConf());
-<a class="jxr_linenumber" name="805" href="#805">805</a>          <em class="jxr_comment">// fs is the source filesystem</em>
-<a class="jxr_linenumber" name="806" href="#806">806</a>             <strong class="jxr_keyword">if</strong>(fs == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="807" href="#807">807</a>               fs = lqis.iterator().next().hfilePath.getFileSystem(getConf());
-<a class="jxr_linenumber" name="808" href="#808">808</a>             }
-<a class="jxr_linenumber" name="809" href="#809">809</a>             <em class="jxr_comment">// Check to see if the source and target filesystems are the same</em>
-<a class="jxr_linenumber" name="810" href="#810">810</a>             <em class="jxr_comment">// If they are the same filesystem, we will try move the files back</em>
-<a class="jxr_linenumber" name="811" href="#811">811</a>             <em class="jxr_comment">// because previously we moved them to the staging directory.</em>
-<a class="jxr_linenumber" name="812" href="#812">812</a>             <strong class="jxr_keyword">if</strong> (FSHDFSUtils.isSameHdfs(getConf(), fs, targetFs)) {
-<a class="jxr_linenumber" name="813" href="#813">813</a>               <strong class="jxr_keyword">for</strong>(Pair&lt;byte[], String&gt; el : famPaths) {
-<a class="jxr_linenumber" name="814" href="#814">814</a>                 Path hfileStagingPath = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="815" href="#815">815</a>                 Path hfileOrigPath = <strong class="jxr_keyword">new</strong> Path(el.getSecond());
-<a class="jxr_linenumber" name="816" href="#816">816</a>                 <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="817" href="#817">817</a>                   hfileStagingPath= <strong class="jxr_keyword">new</strong> Path(secureClient.getStagingPath(bulkToken, el.getFirst()),
-<a class="jxr_linenumber" name="818" href="#818">818</a>                     hfileOrigPath.getName());
-<a class="jxr_linenumber" name="819" href="#819">819</a>                   <strong class="jxr_keyword">if</strong>(targetFs.rename(hfileStagingPath, hfileOrigPath)) {
-<a class="jxr_linenumber" name="820" href="#820">820</a>                     LOG.debug(<span class="jxr_string">"Moved back file "</span> + hfileOrigPath + <span class="jxr_string">" from "</span> +
-<a class="jxr_linenumber" name="821" href="#821">821</a>                         hfileStagingPath);
-<a class="jxr_linenumber" name="822" href="#822">822</a>                   } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong>(targetFs.exists(hfileStagingPath)){
-<a class="jxr_linenumber" name="823" href="#823">823</a>                     LOG.debug(<span class="jxr_string">"Unable to move back file "</span> + hfileOrigPath + <span class="jxr_string">" from "</span> +
-<a class="jxr_linenumber" name="824" href="#824">824</a>                         hfileStagingPath);
-<a class="jxr_linenumber" name="825" href="#825">825</a>                   }
-<a class="jxr_linenumber" name="826" href="#826">826</a>                 } <strong class="jxr_keyword">catch</strong>(Exception ex) {
-<a class="jxr_linenumber" name="827" href="#827">827</a>                   LOG.debug(<span class="jxr_string">"Unable to move back file "</span> + hfileOrigPath + <span class="jxr_string">" from "</span> +
-<a class="jxr_linenumber" name="828" href="#828">828</a>                       hfileStagingPath, ex);
-<a class="jxr_linenumber" name="829" href="#829">829</a>                 }
-<a class="jxr_linenumber" name="830" href="#830">830</a>               }
-<a class="jxr_linenumber" name="831" href="#831">831</a>             }
-<a class="jxr_linenumber" name="832" href="#832">832</a>           }
-<a class="jxr_linenumber" name="833" href="#833">833</a>         }
-<a class="jxr_linenumber" name="834" href="#834">834</a>       }
-<a class="jxr_linenumber" name="835" href="#835">835</a>     };
-<a class="jxr_linenumber" name="836" href="#836">836</a> 
-<a class="jxr_linenumber" name="837" href="#837">837</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="838" href="#838">838</a>       List&lt;LoadQueueItem&gt; toRetry = <strong class="jxr_keyword">new</strong> ArrayList&lt;LoadQueueItem&gt;();
-<a class="jxr_linenumber" name="839" href="#839">839</a>       Configuration conf = getConf();
-<a class="jxr_linenumber" name="840" href="#840">840</a>       <strong class="jxr_keyword">boolean</strong> success = RpcRetryingCallerFactory.instantiate(conf,
-<a class="jxr_linenumber" name="841" href="#841">841</a>           <strong class="jxr_keyword">null</strong>).&lt;Boolean&gt; newCaller()
-<a class="jxr_linenumber" name="842" href="#842">842</a>           .callWithRetries(svrCallable, Integer.MAX_VALUE);
-<a class="jxr_linenumber" name="843" href="#843">843</a>       <strong class="jxr_keyword">if</strong> (!success) {
-<a class="jxr_linenumber" name="844" href="#844">844</a>         LOG.warn(<span class="jxr_string">"Attempt to bulk load region containing "</span>
-<a class="jxr_linenumber" name="845" href="#845">845</a>             + Bytes.toStringBinary(first) + <span class="jxr_string">" into table "</span>
-<a class="jxr_linenumber" name="846" href="#846">846</a>             + tableName  + <span class="jxr_string">" with files "</span> + lqis
-<a class="jxr_linenumber" name="847" href="#847">847</a>             + <span class="jxr_string">" failed.  This is recoverable and they will be retried."</span>);
-<a class="jxr_linenumber" name="848" href="#848">848</a>         toRetry.addAll(lqis); <em class="jxr_comment">// return lqi's to retry</em>
-<a class="jxr_linenumber" name="849" href="#849">849</a>       }
-<a class="jxr_linenumber" name="850" href="#850">850</a>       <em class="jxr_comment">// success</em>
-<a class="jxr_linenumber" name="851" href="#851">851</a>       <strong class="jxr_keyword">return</strong> toRetry;
-<a class="jxr_linenumber" name="852" href="#852">852</a>     } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="853" href="#853">853</a>       LOG.error(<span class="jxr_string">"Encountered unrecoverable error from region server, additional details: "</span>
-<a class="jxr_linenumber" name="854" href="#854">854</a>           + svrCallable.getExceptionMessageAdditionalDetail(), e);
-<a class="jxr_linenumber" name="855" href="#855">855</a>       <strong class="jxr_keyword">throw</strong> e;
-<a class="jxr_linenumber" name="856" href="#856">856</a>     }
-<a class="jxr_linenumber" name="857" href="#857">857</a>   }
-<a class="jxr_linenumber" name="858" href="#858">858</a> 
-<a class="jxr_linenumber" name="859" href="#859">859</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> isSecureBulkLoadEndpointAvailable() {
-<a class="jxr_linenumber" name="860" href="#860">860</a>     String classes = getConf().get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, <span class="jxr_string">""</span>);
-<a class="jxr_linenumber" name="861" href="#861">861</a>     <strong class="jxr_keyword">return</strong> classes.contains(<span class="jxr_string">"org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint"</span>);
-<a class="jxr_linenumber" name="862" href="#862">862</a>   }
-<a class="jxr_linenumber" name="863" href="#863">863</a> 
-<a class="jxr_linenumber" name="864" href="#864">864</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="865" href="#865">865</a> <em class="jxr_javadoccomment">   * Split a storefile into a top and bottom half, maintaining</em>
-<a class="jxr_linenumber" name="866" href="#866">866</a> <em class="jxr_javadoccomment">   * the metadata, recreating bloom filters, etc.</em>
-<a class="jxr_linenumber" name="867" href="#867">867</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="868" href="#868">868</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> splitStoreFile(
-<a class="jxr_linenumber" name="869" href="#869">869</a>       Configuration conf, Path inFile,
-<a class="jxr_linenumber" name="870" href="#870">870</a>       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> familyDesc, byte[] splitKey,
-<a class="jxr_linenumber" name="871" href="#871">871</a>       Path bottomOut, Path topOut) <strong class="jxr_keyword">throws</strong> IOException
-<a class="jxr_linenumber" name="872" href="#872">872</a>   {
-<a class="jxr_linenumber" name="873" href="#873">873</a>     <em class="jxr_comment">// Open reader with no block cache, and not in-memory</em>
-<a class="jxr_linenumber" name="874" href="#874">874</a>     <a href="../../../../../org/apache/hadoop/hbase/io/Reference.html">Reference</a> topReference = Reference.createTopReference(splitKey);
-<a class="jxr_linenumber" name="875" href="#875">875</a>     <a href="../../../../../org/apache/hadoop/hbase/io/Reference.html">Reference</a> bottomReference = Reference.createBottomReference(splitKey);
-<a class="jxr_linenumber" name="876" href="#876">876</a> 
-<a class="jxr_linenumber" name="877" href="#877">877</a>     copyHFileHalf(conf, inFile, topOut, topReference, familyDesc);
-<a class="jxr_linenumber" name="878" href="#878">878</a>     copyHFileHalf(conf, inFile, bottomOut, bottomReference, familyDesc);
-<a class="jxr_linenumber" name="879" href="#879">879</a>   }
-<a class="jxr_linenumber" name="880" href="#880">880</a> 
-<a class="jxr_linenumber" name="881" href="#881">881</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="882" href="#882">882</a> <em class="jxr_javadoccomment">   * Copy half of an HFile into a new HFile.</em>
-<a class="jxr_linenumber" name="883" href="#883">883</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="884" href="#884">884</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> copyHFileHalf(
-<a class="jxr_linenumber" name="885" href="#885">885</a>       Configuration conf, Path inFile, Path outFile, <a href="../../../../../org/apache/hadoop/hbase/io/Reference.html">Reference</a> reference,
-<a class="jxr_linenumber" name="886" href="#886">886</a>       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> familyDescriptor)
-<a class="jxr_linenumber" name="887" href="#887">887</a>   <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="888" href="#888">888</a>     FileSystem fs = inFile.getFileSystem(conf);
-<a class="jxr_linenumber" name="889" href="#889">889</a>     <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html">CacheConfig</a> cacheConf = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html">CacheConfig</a>(conf);
-<a class="jxr_linenumber" name="890" href="#890">890</a>     <a href="../../../../../org/apache/hadoop/hbase/io/HalfStoreFileReader.html">HalfStoreFileReader</a> halfReader = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="891" href="#891">891</a>     StoreFile.Writer halfWriter = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="892" href="#892">892</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="893" href="#893">893</a>       halfReader = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/io/HalfStoreFileReader.html">HalfStoreFileReader</a>(fs, inFile, cacheConf, reference, conf);
-<a class="jxr_linenumber" name="894" href="#894">894</a>       Map&lt;byte[], byte[]&gt; fileInfo = halfReader.loadFileInfo();
-<a class="jxr_linenumber" name="895" href="#895">895</a> 
-<a class="jxr_linenumber" name="896" href="#896">896</a>       <strong class="jxr_keyword">int</strong> blocksize = familyDescriptor.getBlocksize();
-<a class="jxr_linenumber" name="897" href="#897">897</a>       Algorithm compression = familyDescriptor.getCompressionType();
-<a class="jxr_linenumber" name="898" href="#898">898</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html">BloomType</a> bloomFilterType = familyDescriptor.getBloomFilterType();
-<a class="jxr_linenumber" name="899" href="#899">899</a>       <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> hFileContext = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContextBuilder.html">HFileContextBuilder</a>()
-<a class="jxr_linenumber" name="900" href="#900">900</a>                                   .withCompression(compression)
-<a class="jxr_linenumber" name="901" href="#901">901</a>                                   .withChecksumType(HStore.getChecksumType(conf))
-<a class="jxr_linenumber" name="902" href="#902">902</a>                                   .withBytesPerCheckSum(HStore.getBytesPerChecksum(conf))
-<a class="jxr_linenumber" name="903" href="#903">903</a>                                   .withBlockSize(blocksize)
-<a class="jxr_linenumber" name="904" href="#904">904</a>                                   .withDataBlockEncoding(familyDescriptor.getDataBlockEncoding())
-<a class="jxr_linenumber" name="905" href="#905">905</a>                                   .build();
-<a class="jxr_linenumber" name="906" href="#906">906</a>       halfWriter = <strong class="jxr_keyword">new</strong> StoreFile.WriterBuilder(conf, cacheConf,
-<a class="jxr_linenumber" name="907" href="#907">907</a>           fs)
-<a class="jxr_linenumber" name="908" href="#908">908</a>               .withFilePath(outFile)
-<a class="jxr_linenumber" name="909" href="#909">909</a>               .withBloomType(bloomFilterType)
-<a class="jxr_linenumber" name="910" href="#910">910</a>               .withFileContext(hFileContext)
-<a class="jxr_linenumber" name="911" href="#911">911</a>               .build();
-<a class="jxr_linenumber" name="912" href="#912">912</a>       <a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html">HFileScanner</a> scanner = halfReader.getScanner(false, false, false);
-<a class="jxr_linenumber" name="913" href="#913">913</a>       scanner.seekTo();
-<a class="jxr_linenumber" name="914" href="#914">914</a>       <strong class="jxr_keyword">do</strong> {
-<a class="jxr_linenumber" name="915" href="#915">915</a>         halfWriter.append(scanner.getCell());
-<a class="jxr_linenumber" name="916" href="#916">916</a>       } <strong class="jxr_keyword">while</strong> (scanner.next());
-<a class="jxr_linenumber" name="917" href="#917">917</a> 
-<a class="jxr_linenumber" name="918" href="#918">918</a>       <strong class="jxr_keyword">for</strong> (Map.Entry&lt;byte[],byte[]&gt; entry : fileInfo.entrySet()) {
-<a class="jxr_linenumber" name="919" href="#919">919</a>         <strong class="jxr_keyword">if</strong> (shouldCopyHFileMetaKey(entry.getKey())) {
-<a class="jxr_linenumber" name="920" href="#920">920</a>           halfWriter.appendFileInfo(entry.getKey(), entry.getValue());
-<a class="jxr_linenumber" name="921" href="#921">921</a>         }
-<a class="jxr_linenumber" name="922" href="#922">922</a>       }
-<a class="jxr_linenumber" name="923" href="#923">923</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="924" href="#924">924</a>       <strong class="jxr_keyword">if</strong> (halfWriter != <strong class="jxr_keyword">null</strong>) halfWriter.close();
-<a class="jxr_linenumber" name="925" href="#925">925</a>       <strong class="jxr_keyword">if</strong> (halfReader != <strong class="jxr_keyword">null</strong>) halfReader.close(cacheConf.shouldEvictOnClose());
-<a class="jxr_linenumber" name="926" href="#926">926</a>     }
-<a class="jxr_linenumber" name="927" href="#927">927</a>   }
-<a class="jxr_linenumber" name="928" href="#928">928</a> 
-<a class="jxr_linenumber" name="929" href="#929">929</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> shouldCopyHFileMetaKey(byte[] key) {
-<a class="jxr_linenumber" name="930" href="#930">930</a>     <strong class="jxr_keyword">return</strong> !HFile.isReservedFileInfoKey(key);
-<a class="jxr_linenumber" name="931" href="#931">931</a>   }
-<a class="jxr_linenumber" name="932" href="#932">932</a> 
-<a class="jxr_linenumber" name="933" href="#933">933</a>   <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="934" href="#934">934</a> <em class="jxr_comment">   * Infers region boundaries for a new table.</em>
-<a class="jxr_linenumber" name="935" href="#935">935</a> <em class="jxr_comment">   * Parameter:</em>
-<a class="jxr_linenumber" name="936" href="#936">936</a> <em class="jxr_comment">   *   bdryMap is a map between keys to an integer belonging to {+1, -1}</em>
-<a class="jxr_linenumber" name="937" href="#937">937</a> <em class="jxr_comment">   *     If a key is a start key of a file, then it maps to +1</em>
-<a class="jxr_linenumber" name="938" href="#938">938</a> <em class="jxr_comment">   *     If a key is an end key of a file, then it maps to -1</em>
-<a class="jxr_linenumber" name="939" href="#939">939</a> <em class="jxr_comment">   * Algo:</em>
-<a class="jxr_linenumber" name="940" href="#940">940</a> <em class="jxr_comment">   * 1) Poll on the keys in order:</em>
-<a class="jxr_linenumber" name="941" href="#941">941</a> <em class="jxr_comment">   *    a) Keep adding the mapped values to these keys (runningSum)</em>
-<a class="jxr_linenumber" name="942" href="#942">942</a> <em class="jxr_comment">   *    b) Each time runningSum reaches 0, add the start Key from when the runningSum had started to</em>
-<a class="jxr_linenumber" name="943" href="#943">943</a> <em class="jxr_comment">   *       a boundary list.</em>
-<a class="jxr_linenumber" name="944" href="#944">944</a> <em class="jxr_comment">   * 2) Return the boundary list.</em>
-<a class="jxr_linenumber" name="945" href="#945">945</a> <em class="jxr_comment">   */</em>
-<a class="jxr_linenumber" name="946" href="#946">946</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> byte[][] inferBoundaries(TreeMap&lt;byte[], Integer&gt; bdryMap) {
-<a class="jxr_linenumber" name="947" href="#947">947</a>     ArrayList&lt;byte[]&gt; keysArray = <strong class="jxr_keyword">new</strong> ArrayList&lt;byte[]&gt;();
-<a class="jxr_linenumber" name="948" href="#948">948</a>     <strong class="jxr_keyword">int</strong> runningValue = 0;
-<a class="jxr_linenumber" name="949" href="#949">949</a>     byte[] currStartKey = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="950" href="#950">950</a>     <strong class="jxr_keyword">boolean</strong> firstBoundary = <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="951" href="#951">951</a> 
-<a class="jxr_linenumber" name="952" href="#952">952</a>     <strong class="jxr_keyword">for</strong> (Map.Entry&lt;byte[], Integer&gt; item: bdryMap.entrySet()) {
-<a class="jxr_linenumber" name="953" href="#953">953</a>       <strong class="jxr_keyword">if</strong> (runningValue == 0) currStartKey = item.getKey();
-<a class="jxr_linenumber" name="954" href="#954">954</a>       runningValue += item.getValue();
-<a class="jxr_linenumber" name="955" href="#955">955</a>       <strong class="jxr_keyword">if</strong> (runningValue == 0) {
-<a class="jxr_linenumber" name="956" href="#956">956</a>         <strong class="jxr_keyword">if</strong> (!firstBoundary) keysArray.add(currStartKey);
-<a class="jxr_linenumber" name="957" href="#957">957</a>         firstBoundary = false;
-<a class="jxr_linenumber" name="958" href="#958">958</a>       }
-<a class="jxr_linenumber" name="959" href="#959">959</a>     }
-<a class="jxr_linenumber" name="960" href="#960">960</a> 
-<a class="jxr_linenumber" name="961" href="#961">961</a>     <strong class="jxr_keyword">return</strong> keysArray.toArray(<strong class="jxr_keyword">new</strong> byte[0][0]);
-<a class="jxr_linenumber" name="962" href="#962">962</a>   }
-<a class="jxr_linenumber" name="963" href="#963">963</a> 
-<a class="jxr_linenumber" name="964" href="#964">964</a>   <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="965" href="#965">965</a> <em class="jxr_comment">   * If the table is created for the first time, then "completebulkload" reads the files twice.</em>
-<a class="jxr_linenumber" name="966" href="#966">966</a> <em class="jxr_comment">   * More modifications necessary if we want to avoid doing it.</em>
-<a class="jxr_linenumber" name="967" href="#967">967</a> <em class="jxr_comment">   */</em>
-<a class="jxr_linenumber" name="968" href="#968">968</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> createTable(<a href="../../../../../org/apache/hadoop/hbase/TableName.html">TableName</a> tableName, String dirPath, <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html">Admin</a> admin) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="969" href="#969">969</a>     <strong class="jxr_keyword">final</strong> Path hfofDir = <strong class="jxr_keyword">new</strong> Path(dirPath);
-<a class="jxr_linenumber" name="970" href="#970">970</a>     <strong class="jxr_keyword">final</strong> FileSystem fs = hfofDir.getFileSystem(getConf());
-<a class="jxr_linenumber" name="971" href="#971">971</a> 
-<a class="jxr_linenumber" name="972" href="#972">972</a>     <em class="jxr_comment">// Add column families</em>
-<a class="jxr_linenumber" name="973" href="#973">973</a>     <em class="jxr_comment">// Build a set of keys</em>
-<a class="jxr_linenumber" name="974" href="#974">974</a>     <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a> htd = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html">HTableDescriptor</a>(tableName);
-<a class="jxr_linenumber" name="975" href="#975">975</a>     <strong class="jxr_keyword">final</strong> TreeMap&lt;byte[], Integer&gt; map = <strong class="jxr_keyword">new</strong> TreeMap&lt;byte[], Integer&gt;(Bytes.BYTES_COMPARATOR);
-<a class="jxr_linenumber" name="976" href="#976">976</a>     visitBulkHFiles(fs, hfofDir, <strong class="jxr_keyword">new</strong> BulkHFileVisitor&lt;HColumnDescriptor&gt;() {
-<a class="jxr_linenumber" name="977" href="#977">977</a>       @Override
-<a class="jxr_linenumber" name="978" href="#978">978</a>       <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> bulkFamily(<strong class="jxr_keyword">final</strong> byte[] familyName) {
-<a class="jxr_linenumber" name="979" href="#979">979</a>         <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> hcd = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a>(familyName);
-<a class="jxr_linenumber" name="980" href="#980">980</a>         htd.addFamily(hcd);
-<a class="jxr_linenumber" name="981" href="#981">981</a>         <strong class="jxr_keyword">return</strong> hcd;
-<a class="jxr_linenumber" name="982" href="#982">982</a>       }
-<a class="jxr_linenumber" name="983" href="#983">983</a>       @Override
-<a class="jxr_linenumber" name="984" href="#984">984</a>       <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> bulkHFile(<strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> hcd, <strong class="jxr_keyword">final</strong> FileStatus hfileStatus)
-<a class="jxr_linenumber" name="985" href="#985">985</a>           <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="986" href="#986">986</a>         Path hfile = hfileStatus.getPath();
-<a class="jxr_linenumber" name="987" href="#987">987</a>         HFile.Reader reader = HFile.createReader(fs, hfile,
-<a class="jxr_linenumber" name="988" href="#988">988</a>             <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html">CacheConfig</a>(getConf()), getConf());
-<a class="jxr_linenumber" name="989" href="#989">989</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="990" href="#990">990</a>           <strong class="jxr_keyword">if</strong> (hcd.getCompressionType() != reader.getFileContext().getCompression()) {
-<a class="jxr_linenumber" name="991" href="#991">991</a>             hcd.setCompressionType(reader.getFileContext().getCompression());
-<a class="jxr_linenumber" name="992" href="#992">992</a>             LOG.info(<span class="jxr_string">"Setting compression "</span> + hcd.getCompressionType().name() +
-<a class="jxr_linenumber" name="993" href="#993">993</a>                      <span class="jxr_string">" for family "</span> + hcd.toString());
-<a class="jxr_linenumber" name="994" href="#994">994</a>           }
-<a class="jxr_linenumber" name="995" href="#995">995</a>           reader.loadFileInfo();
-<a class="jxr_linenumber" name="996" href="#996">996</a>           byte[] first = reader.getFirstRowKey();
-<a class="jxr_linenumber" name="997" href="#997">997</a>           byte[] last  = reader.getLastRowKey();
-<a class="jxr_linenumber" name="998" href="#998">998</a> 
-<a class="jxr_linenumber" name="999" href="#999">999</a>           LOG.info(<span class="jxr_string">"Trying to figure out region boundaries hfile="</span> + hfile +
-<a class="jxr_linenumber" name="1000" href="#1000">1000</a>             <span class="jxr_string">" first="</span> + Bytes.toStringBinary(first) +
-<a class="jxr_linenumber" name="1001" href="#1001">1001</a>             <span class="jxr_string">" last="</span>  + Bytes.toStringBinary(last));
-<a class="jxr_linenumber" name="1002" href="#1002">1002</a> 
-<a class="jxr_linenumber" name="1003" href="#1003">1003</a>           <em class="jxr_comment">// To eventually infer start key-end key boundaries</em>
-<a class="jxr_linenumber" name="1004" href="#1004">1004</a>           Integer value = map.containsKey(first)? map.get(first):0;
-<a class="jxr_linenumber" name="1005" href="#1005">1005</a>           map.put(first, value+1);
-<a class="jxr_linenumber" name="1006" href="#1006">1006</a> 
-<a class="jxr_linenumber" name="1007" href="#1007">1007</a>           value = map.containsKey(last)? map.get(last):0;
-<a class="jxr_linenumber" name="1008" href="#1008">1008</a>           map.put(last, value-1);
-<a class="jxr_linenumber" name="1009" href="#1009">1009</a>         } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1010" href="#1010">1010</a>           reader.close();
-<a class="jxr_linenumber" name="1011" href="#1011">1011</a>         }
-<a class="jxr_linenumber" name="1012" href="#1012">1012</a>       }
-<a class="jxr_linenumber" name="1013" href="#1013">1013</a>     });
-<a class="jxr_linenumber" name="1014" href="#1014">1014</a> 
-<a class="jxr_linenumber" name="1015" href="#1015">1015</a>     byte[][] keys = LoadIncrementalHFiles.inferBoundaries(map);
-<a class="jxr_linenumber" name="1016" href="#1016">1016</a>     admin.createTable(htd, keys);
-<a class="jxr_linenumber" name="1017" href="#1017">1017</a> 
-<a class="jxr_linenumber" name="1018" href="#1018">1018</a>     LOG.info(<span class="jxr_string">"Table "</span>+ tableName +<span class="jxr_string">" is available!!"</span>);
-<a class="jxr_linenumber" name="1019" href="#1019">1019</a>   }
-<a class="jxr_linenumber" name="1020" href="#1020">1020</a> 
-<a class="jxr_linenumber" name="1021" href="#1021">1021</a>   @Override
-<a class="jxr_linenumber" name="1022" href="#1022">1022</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> run(String[] args) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="1023" href="#1023">1023</a>     <strong class="jxr_keyword">if</strong> (args.length != 2) {
-<a class="jxr_linenumber" name="1024" href="#1024">1024</a>       usage();
-<a class="jxr_linenumber" name="1025" href="#1025">1025</a>       <strong class="jxr_keyword">return</strong> -1;
-<a class="jxr_linenumber" name="1026" href="#1026">1026</a>     }
-<a class="jxr_linenumber" name="1027" href="#1027">1027</a> 
-<a class="jxr_linenumber" name="1028" href="#1028">1028</a>     initialize();
-<a class="jxr_linenumber" name="1029" href="#1029">1029</a>     <strong class="jxr_keyword">try</strong> (Connection connection = ConnectionFactory.createConnection(getConf());
-<a class="jxr_linenumber" name="1030" href="#1030">1030</a>         <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html">Admin</a> admin = connection.getAdmin()) {
-<a class="jxr_linenumber" name="1031" href="#1031">1031</a>       String dirPath = args[0];
-<a class="jxr_linenumber" name="1032" href="#1032">1032</a>       <a href="../../../../../org/apache/hadoop/hbase/TableName.html">TableName</a> tableName = TableName.valueOf(args[1]);
-<a class="jxr_linenumber" name="1033" href="#1033">1033</a> 
-<a class="jxr_linenumber" name="1034" href="#1034">1034</a>       <strong class="jxr_keyword">boolean</strong> tableExists = admin.tableExists(tableName);
-<a class="jxr_linenumber" name="1035" href="#1035">1035</a>       <strong class="jxr_keyword">if</strong> (!tableExists) {
-<a class="jxr_linenumber" name="1036" href="#1036">1036</a>         <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"yes"</span>.equalsIgnoreCase(getConf().get(CREATE_TABLE_CONF_KEY, <span class="jxr_string">"yes"</span>))) {
-<a class="jxr_linenumber" name="1037" href="#1037">1037</a>           <strong class="jxr_keyword">this</strong>.createTable(tableName, dirPath, admin);
-<a class="jxr_linenumber" name="1038" href="#1038">1038</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1039" href="#1039">1039</a>           String errorMsg = format(<span class="jxr_string">"Table '%s' does not exist."</span>, tableName);
-<a class="jxr_linenumber" name="1040" href="#1040">1040</a>           LOG.error(errorMsg);
-<a class="jxr_linenumber" name="1041" href="#1041">1041</a>           <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/TableNotFoundException.html">TableNotFoundException</a>(errorMsg);
-<a class="jxr_linenumber" name="1042" href="#1042">1042</a>         }
-<a class="jxr_linenumber" name="1043" href="#1043">1043</a>       }
-<a class="jxr_linenumber" name="1044" href="#1044">1044</a> 
-<a class="jxr_linenumber" name="1045" href="#1045">1045</a>       Path hfofDir = <strong class="jxr_keyword">new</strong> Path(dirPath);
-<a class="jxr_linenumber" name="1046" href="#1046">1046</a> 
-<a class="jxr_linenumber" name="1047" href="#1047">1047</a>       <strong class="jxr_keyword">try</strong> (Table table = connection.getTable(tableName);
-<a class="jxr_linenumber" name="1048" href="#1048">1048</a>           <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html">RegionLocator</a> locator = connection.getRegionLocator(tableName)) {
-<a class="jxr_linenumber" name="1049" href="#1049">1049</a>           doBulkLoad(hfofDir, admin, table, locator);
-<a class="jxr_linenumber" name="1050" href="#1050">1050</a>       }
-<a class="jxr_linenumber" name="1051" href="#1051">1051</a>     }
-<a class="jxr_linenumber" name="1052" href="#1052">1052</a> 
-<a class="jxr_linenumber" name="1053" href="#1053">1053</a>     <strong class="jxr_keyword">return</strong> 0;
-<a class="jxr_linenumber" name="1054" href="#1054">1054</a>   }
-<a class="jxr_linenumber" name="1055" href="#1055">1055</a> 
-<a class="jxr_linenumber" name="1056" href="#1056">1056</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> main(String[] args) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="1057" href="#1057">1057</a>     Configuration conf = HBaseConfiguration.create();
-<a class="jxr_linenumber" name="1058" href="#1058">1058</a>     <strong class="jxr_keyword">int</strong> ret = ToolRunner.run(conf, <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html">LoadIncrementalHFiles</a>(), args);
-<a class="jxr_linenumber" name="1059" href="#1059">1059</a>     System.exit(ret);
-<a class="jxr_linenumber" name="1060" href="#1060">1060</a>   }
-<a class="jxr_linenumber" name="1061" href="#1061">1061</a> 
-<a class="jxr_linenumber" name="1062" href="#1062">1062</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1063" href="#1063">1063</a> <em class="jxr_javadoccomment">   * Called from replication sink, where it manages bulkToken(staging directory) by itself. This is</em>
-<a class="jxr_linenumber" name="1064" href="#1064">1064</a> <em class="jxr_javadoccomment">   * used only when {@link SecureBulkLoadEndpoint} is configured in hbase.coprocessor.region.classes</em>
-<a class="jxr_linenumber" name="1065" href="#1065">1065</a> <em class="jxr_javadoccomment">   * property. This directory is used as a temporary directory where all files are initially</em>
-<a class="jxr_linenumber" name="1066" href="#1066">1066</a> <em class="jxr_javadoccomment">   * copied/moved from user given directory, set all the required file permissions and then from</em>
-<a class="jxr_linenumber" name="1067" href="#1067">1067</a> <em class="jxr_javadoccomment">   * their it is finally loaded into a table. This should be set only when, one would like to manage</em>
-<a class="jxr_linenumber" name="1068" href="#1068">1068</a> <em class="jxr_javadoccomment">   * the staging directory by itself. Otherwise this tool will handle this by itself.</em>
-<a class="jxr_linenumber" name="1069" href="#1069">1069</a> <em class="jxr_javadoccomment">   * @param stagingDir staging directory path</em>
-<a class="jxr_linenumber" name="1070" href="#1070">1070</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1071" href="#1071">1071</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setBulkToken(String stagingDir) {
-<a class="jxr_linenumber" name="1072" href="#1072">1072</a>     <strong class="jxr_keyword">this</strong>.bulkToken = stagingDir;
-<a class="jxr_linenumber" name="1073" href="#1073">1073</a>   }
-<a class="jxr_linenumber" name="1074" href="#1074">1074</a> 
-<a class="jxr_linenumber" name="1075" href="#1075">1075</a> }
+<a class="jxr_linenumber" name="428" href="#428">428</a> <em class="jxr_javadoccomment">   * @param validateHFile if true hfiles will be validated for its format</em>
+<a class="jxr_linenumber" name="429" href="#429">429</a> <em class="jxr_javadoccomment">   * @throws IOException If any I/O or network error occurred</em>
+<a class="jxr_linenumber" name="430" href="#430">430</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="431" href="#431">431</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> prepareHFileQueue(Path hfilesDir, <a href="../../../../../org/apache/hadoop/hbase/client/Table.html">Table</a> table, Deque&lt;LoadQueueItem&gt; queue,
+<a class="jxr_linenumber" name="432" href="#432">432</a>       <strong class="jxr_keyword">boolean</strong> validateHFile) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="433" href="#433">433</a>     discoverLoadQueue(queue, hfilesDir, validateHFile);
+<a class="jxr_linenumber" name="434" href="#434">434</a>     validateFamiliesInHFiles(table, queue);
+<a class="jxr_linenumber" name="435" href="#435">435</a>   }
+<a class="jxr_linenumber" name="436" href="#436">436</a> 
+<a class="jxr_linenumber" name="437" href="#437">437</a>   <em class="jxr_comment">// Initialize a thread pool</em>
+<a class="jxr_linenumber" name="438" href="#438">438</a>   <strong class="jxr_keyword">private</strong> ExecutorService createExecutorService() {
+<a class="jxr_linenumber" name="439" href="#439">439</a>     ThreadFactoryBuilder builder = <strong class="jxr_keyword">new</strong> ThreadFactoryBuilder();
+<a class="jxr_linenumber" name="440" href="#440">440</a>     builder.setNameFormat(<span class="jxr_string">"LoadIncrementalHFiles-%1$d"</span>);
+<a class="jxr_linenumber" name="441" href="#441">441</a>     ExecutorService pool = <strong class="jxr_keyword">new</strong> ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,
+<a class="jxr_linenumber" name="442" href="#442">442</a>         <strong class="jxr_keyword">new</strong> LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());
+<a class="jxr_linenumber" name="443" href="#443">443</a>     ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="444" href="#444">444</a>     <strong class="jxr_keyword">return</strong> pool;
+<a class="jxr_linenumber" name="445" href="#445">445</a>   }
+<a class="jxr_linenumber" name="446" href="#446">446</a> 
+<a class="jxr_linenumber" name="447" href="#447">447</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="448" href="#448">448</a> <em class="jxr_javadoccomment">   * Checks whether there is any invalid family name in HFiles to be bulk loaded.</em>
+<a class="jxr_linenumber" name="449" href="#449">449</a> <em class="jxr_javadoccom

<TRUNCATED>

[25/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 feed20b..abb8a15 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
@@ -31,2767 +31,2812 @@
 <span class="sourceLineNo">023</span>import java.net.BindException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.net.InetSocketAddress;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.net.UnknownHostException;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Iterator;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map.Entry;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.commons.logging.Log;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.logging.LogFactory;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Cell;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HConstants;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ServerName;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.TableName;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Append;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Get;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Put;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.security.User;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.zookeeper.KeeperException;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>import com.google.common.annotations.VisibleForTesting;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import com.google.protobuf.ByteString;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import com.google.protobuf.Message;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import com.google.protobuf.RpcController;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import com.google.protobuf.ServiceException;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@InterfaceAudience.Private<a name="line.194"></a>
-<span class="sourceLineNo">195</span>@SuppressWarnings("deprecation")<a name="line.195"></a>
-<span class="sourceLineNo">196</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ConfigurationObserver {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /** RPC scheduler to use for the region server. */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  final Counter requestCount = new Counter();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  // Server to handle client requests.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  final RpcServerInterface rpcServer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  final InetSocketAddress isa;<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private final HRegionServer regionServer;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private final long maxScannerResultSize;<a name="line.224"></a>
+<span class="sourceLineNo">026</span>import java.nio.ByteBuffer;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.HashMap;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Map.Entry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.NavigableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Set;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.commons.logging.Log;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.commons.logging.LogFactory;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.conf.Configuration;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.Cell;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Append;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Get;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Result;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.security.User;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.zookeeper.KeeperException;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>import com.google.common.annotations.VisibleForTesting;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import com.google.protobuf.ByteString;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import com.google.protobuf.Message;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import com.google.protobuf.RpcController;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import com.google.protobuf.ServiceException;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.195"></a>
+<span class="sourceLineNo">196</span> */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>@InterfaceAudience.Private<a name="line.197"></a>
+<span class="sourceLineNo">198</span>@SuppressWarnings("deprecation")<a name="line.198"></a>
+<span class="sourceLineNo">199</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    ConfigurationObserver {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** RPC scheduler to use for the region server. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  final Counter requestCount = new Counter();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // Server to handle client requests.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  final RpcServerInterface rpcServer;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  final InetSocketAddress isa;<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  // The reference to the priority extraction function<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private final PriorityFunction priority;<a name="line.227"></a>
+<span class="sourceLineNo">226</span>  private final HRegionServer regionServer;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  private final long maxScannerResultSize;<a name="line.227"></a>
 <span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * The RPC timeout period (milliseconds)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private final int rpcTimeout;<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The minimum allowable delta to use for the scan limit<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  private final long minimumScanTimeLimitDelta;<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>   * An Rpc callback for closing a RegionScanner.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    private final RegionScanner scanner;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.scanner = scanner;<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>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void run() throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      this.scanner.close();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    private final String scannerName;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    private final RegionScanner scanner;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final Lease lease;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      this.scannerName = scannerName;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.scanner = scanner;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.lease = lease;<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public void run() throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.scanner.shipped();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (scanners.containsKey(scannerName)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * completion of multiGets.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public void addScanner(RegionScanner scanner) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.scanners.add(scanner);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public void run() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      for (RegionScanner scanner : scanners) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          scanner.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static class RegionScannerHolder {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private RegionScanner s;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    private Region r;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final RpcCallback closeCallBack;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final RpcCallback shippedCallback;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        RpcCallback shippedCallback) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.s = s;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.r = r;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.closeCallBack = closeCallBack;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.shippedCallback = shippedCallback;<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 getNextCallSeq() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      return nextCallSeq.get();<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 void incNextCallSeq() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      nextCallSeq.incrementAndGet();<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 rollbackNextCallSeq() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      nextCallSeq.decrementAndGet();<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * closed<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private class ScannerListener implements LeaseListener {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    private final String scannerName;<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    ScannerListener(final String n) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      this.scannerName = n;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public void leaseExpired() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (rsh != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        RegionScanner s = rsh.s;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        try {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          s.close();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        } catch (IOException e) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          LOG.error("Closing scanner for "<a name="line.373"></a>
-<span class="sourceLineNo">374</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " scanner found, hence no chance to close that related scanner!");<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>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static ResultOrException getResultOrException(<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      final ClientProtos.Result r, final int index, final ClientProtos.RegionLoadStats stats) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return getResultOrException(ResponseConverter.buildActionResult(r, stats), index);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      final ResultOrException.Builder builder, final int index) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return builder.setIndex(index).build();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param mutation Mutation.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param nonceGroup Nonce group from the request.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @returns Nonce used (can be NO_NONCE).<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  private long startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      throws IOException, OperationConflictException {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return HConstants.NO_NONCE;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    boolean canProceed = false;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    try {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    } catch (InterruptedException ex) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    if (!canProceed) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      // TODO: instead, we could convert append/increment to get w/mvcc<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      String message = "The operation with nonce {" + nonceGroup + ", " + mutation.getNonce()<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        + "} on row [" + Bytes.toString(mutation.getRow().toByteArray())<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        + "] may have already completed";<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      throw new OperationConflictException(message);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    return mutation.getNonce();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * Ends nonce operation for a mutation, if needed.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @param mutation Mutation.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      long nonceGroup, boolean success) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<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><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return True if current call supports cellblocks<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private boolean isClientCellBlockSupport() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    RpcCallContext context = RpcServer.getCurrentCall();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final PayloadCarryingRpcController rpcc) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (result == null) return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (isClientCellBlockSupport()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      builder.setResult(pbr);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private void addResults(final ScanResponse.Builder builder, final List&lt;Result&gt; results,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final RpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    builder.setStale(!isDefaultRegion);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (results == null || results.isEmpty()) return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    if (clientCellBlockSupported) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (Result res : results) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        builder.addCellsPerResult(res.size());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        builder.addPartialFlagPerResult(res.isPartial());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      ((PayloadCarryingRpcController)controller).<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        setCellScanner(CellUtil.createCellScanner(results));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    } else {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      for (Result res: results) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        builder.addResults(pbr);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<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>   * Mutate a list of rows atomically.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param region<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param actions<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @throws IOException<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private ClientProtos.RegionLoadStats mutateRows(final Region region,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      final CellScanner cellScanner) throws IOException {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    RowMutations rm = null;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    for (ClientProtos.Action action: actions) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      if (action.hasGet()) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          action.getGet());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      MutationType type = action.getMutation().getMutateType();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (rm == null) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        rm = new RowMutations(action.getMutation().getRow().toByteArray());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      switch (type) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        case PUT:<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          rm.add(ProtobufUtil.toPut(action.getMutation(), cellScanner));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          break;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        case DELETE:<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          rm.add(ProtobufUtil.toDelete(action.getMutation(), cellScanner));<a name="line.508"></a>
+<span class="sourceLineNo">229</span>  // The reference to the priority extraction function<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private final PriorityFunction priority;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  private final long minimumScanTimeLimitDelta;<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * An Rpc callback for closing a RegionScanner.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    private final RegionScanner scanner;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      this.scanner = scanner;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public void run() throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      this.scanner.close();<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    private final String scannerName;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    private final RegionScanner scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    private final Lease lease;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.scannerName = scannerName;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.scanner = scanner;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.lease = lease;<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      this.scanner.shipped();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (scanners.containsKey(scannerName)) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<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><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * completion of multiGets.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public void addScanner(RegionScanner scanner) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      this.scanners.add(scanner);<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>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (RegionScanner scanner : scanners) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        try {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          scanner.close();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } catch (IOException e) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private static class RegionScannerHolder {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private RegionScanner s;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private Region r;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final RpcCallback closeCallBack;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final RpcCallback shippedCallback;<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        RpcCallback shippedCallback) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.s = s;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.r = r;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.closeCallBack = closeCallBack;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.shippedCallback = shippedCallback;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private long getNextCallSeq() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return nextCallSeq.get();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    private void incNextCallSeq() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      nextCallSeq.incrementAndGet();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private void rollbackNextCallSeq() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      nextCallSeq.decrementAndGet();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * closed<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private class ScannerListener implements LeaseListener {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private final String scannerName;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    ScannerListener(final String n) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      this.scannerName = n;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public void leaseExpired() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (rsh != null) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        RegionScanner s = rsh.s;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          s.close();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        } catch (IOException e) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          LOG.error("Closing scanner for "<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.377"></a>
+<span class="sourceLineN

<TRUNCATED>

[38/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 786ade2..04dfd20 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -148,9 +148,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</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="strong">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="strong">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="strong">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
index f29bceb..fa3eec2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTable.html
@@ -446,7 +446,7 @@
 <span class="sourceLineNo">438</span>          try {<a name="line.438"></a>
 <span class="sourceLineNo">439</span>            ClientProtos.GetResponse response = getStub().get(controller, request);<a name="line.439"></a>
 <span class="sourceLineNo">440</span>            if (response == null) return null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>            return ProtobufUtil.toResult(response.getResult());<a name="line.441"></a>
+<span class="sourceLineNo">441</span>            return ProtobufUtil.toResult(response.getResult(), controller.cellScanner());<a name="line.441"></a>
 <span class="sourceLineNo">442</span>          } catch (ServiceException se) {<a name="line.442"></a>
 <span class="sourceLineNo">443</span>            throw ProtobufUtil.getRemoteException(se);<a name="line.443"></a>
 <span class="sourceLineNo">444</span>          }<a name="line.444"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.ReplicaRegionServerCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.ReplicaRegionServerCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.ReplicaRegionServerCallable.html
index 6933e29..763f06b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.ReplicaRegionServerCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.ReplicaRegionServerCallable.html
@@ -169,7 +169,7 @@
 <span class="sourceLineNo">161</span>        if (response == null) {<a name="line.161"></a>
 <span class="sourceLineNo">162</span>          return null;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>        }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        return ProtobufUtil.toResult(response.getResult());<a name="line.164"></a>
+<span class="sourceLineNo">164</span>        return ProtobufUtil.toResult(response.getResult(), controller.cellScanner());<a name="line.164"></a>
 <span class="sourceLineNo">165</span>      } catch (ServiceException se) {<a name="line.165"></a>
 <span class="sourceLineNo">166</span>        throw ProtobufUtil.getRemoteException(se);<a name="line.166"></a>
 <span class="sourceLineNo">167</span>      }<a name="line.167"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
index 6933e29..763f06b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html
@@ -169,7 +169,7 @@
 <span class="sourceLineNo">161</span>        if (response == null) {<a name="line.161"></a>
 <span class="sourceLineNo">162</span>          return null;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>        }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        return ProtobufUtil.toResult(response.getResult());<a name="line.164"></a>
+<span class="sourceLineNo">164</span>        return ProtobufUtil.toResult(response.getResult(), controller.cellScanner());<a name="line.164"></a>
 <span class="sourceLineNo">165</span>      } catch (ServiceException se) {<a name="line.165"></a>
 <span class="sourceLineNo">166</span>        throw ProtobufUtil.getRemoteException(se);<a name="line.166"></a>
 <span class="sourceLineNo">167</span>      }<a name="line.167"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
index ffe5d83..092816a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/VersionInfoUtil.html
@@ -52,23 +52,31 @@
 <span class="sourceLineNo">044</span>                                          int major,<a name="line.44"></a>
 <span class="sourceLineNo">045</span>                                          int minor) {<a name="line.45"></a>
 <span class="sourceLineNo">046</span>    if (versionInfo != null) {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>      try {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>        String[] components = versionInfo.getVersion().split("\\.");<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>        int clientMajor = components.length &gt; 0 ? Integer.parseInt(components[0]) : 0;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>        if (clientMajor != major) {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>          return clientMajor &gt; major;<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>        int clientMinor = components.length &gt; 1 ? Integer.parseInt(components[1]) : 0;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>        return clientMinor &gt;= minor;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      } catch (NumberFormatException e) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>        return false;<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>    return false;<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">047</span>      if (versionInfo.hasVersionMajor() &amp;&amp; versionInfo.hasVersionMinor()) {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>        int clientMajor = versionInfo.getVersionMajor();<a name="line.48"></a>
+<span class="sourceLineNo">049</span>        if (clientMajor != major) {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>          return clientMajor &gt; major;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>        }<a name="line.51"></a>
+<span class="sourceLineNo">052</span>        int clientMinor = versionInfo.getVersionMinor();<a name="line.52"></a>
+<span class="sourceLineNo">053</span>        return clientMinor &gt;= minor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      }<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      try {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>        String[] components = versionInfo.getVersion().split("\\.");<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>        int clientMajor = components.length &gt; 0 ? Integer.parseInt(components[0]) : 0;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>        if (clientMajor != major) {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>          return clientMajor &gt; major;<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>        int clientMinor = components.length &gt; 1 ? Integer.parseInt(components[1]) : 0;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>        return clientMinor &gt;= minor;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      } catch (NumberFormatException e) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>        return false;<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>    return false;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html
index 94e282c..a60b019 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html
@@ -98,7 +98,10 @@
 <span class="sourceLineNo">090</span>   * onerous.<a name="line.90"></a>
 <span class="sourceLineNo">091</span>   */<a name="line.91"></a>
 <span class="sourceLineNo">092</span>  void incrementResponseCellSize(long cellSize);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>}<a name="line.93"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  long getResponseBlockSize();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  void incrementResponseBlockSize(long blockSize);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>}<a name="line.96"></a>
 
 
 


[48/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.


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

Branch: refs/heads/asf-site
Commit: d917c66aa97f4dc102f2afc2108ef02c73dc36cc
Parents: 441a69c
Author: jenkins <bu...@apache.org>
Authored: Fri Dec 18 15:00:39 2015 +0000
Committer: Misty Stanley-Jones <ms...@cloudera.com>
Committed: Fri Dec 18 08:41:31 2015 -0800

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |  Bin 14189777 -> 14189777 bytes
 apache_hbase_reference_guide.pdfmarks           |    4 +-
 .../hadoop/hbase/client/class-use/Table.html    |    2 +-
 .../hbase/mapreduce/LoadIncrementalHFiles.html  |   24 +-
 .../hbase/mapreduce/LoadIncrementalHFiles.html  | 1297 +++--
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |  494 +-
 coc.html                                        |    4 +-
 cygwin.html                                     |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/index-all.html                       |   14 +
 .../class-use/InterfaceStability.Unstable.html  |   12 +-
 .../hbase/classification/package-tree.html      |    4 +-
 .../hadoop/hbase/client/class-use/Result.html   |   10 +-
 .../hadoop/hbase/client/class-use/Table.html    |    2 +-
 .../hadoop/hbase/client/package-tree.html       |    6 +-
 .../hadoop/hbase/filter/package-tree.html       |    8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    4 +-
 .../apache/hadoop/hbase/ipc/RpcCallContext.html |   28 +-
 .../RpcServer.BlockingServiceAndInterface.html  |   12 +-
 .../apache/hadoop/hbase/ipc/RpcServer.Call.html |  119 +-
 .../ipc/RpcServer.CallQueueTooBigException.html |    4 +-
 .../hadoop/hbase/ipc/RpcServer.Connection.html  |  132 +-
 .../hbase/ipc/RpcServer.Listener.Reader.html    |   18 +-
 .../hadoop/hbase/ipc/RpcServer.Listener.html    |   38 +-
 .../hadoop/hbase/ipc/RpcServer.Responder.html   |   26 +-
 .../org/apache/hadoop/hbase/ipc/RpcServer.html  |   80 +-
 .../hbase/ipc/class-use/RpcCallContext.html     |   12 +-
 .../hbase/mapreduce/LoadIncrementalHFiles.html  |   44 +-
 .../LoadIncrementalHFiles.LoadQueueItem.html    |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    4 +-
 .../hbase/master/balancer/package-tree.html     |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    6 +-
 .../hbase/master/procedure/package-tree.html    |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    4 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/quotas/package-tree.html       |    4 +-
 ...SRpcServices.RegionScannerCloseCallBack.html |    8 +-
 .../RSRpcServices.RegionScannerHolder.html      |   20 +-
 ...pcServices.RegionScannerShippedCallBack.html |   12 +-
 ...RpcServices.RegionScannersCloseCallBack.html |   10 +-
 .../RSRpcServices.ScannerListener.html          |    8 +-
 .../hbase/regionserver/RSRpcServices.html       |  295 +-
 .../hadoop/hbase/regionserver/package-tree.html |   22 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |  180 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   72 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |   36 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   36 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |   18 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    6 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    4 +-
 .../org/apache/hadoop/hbase/client/HTable.html  |    2 +-
 ...eadReplicas.ReplicaRegionServerCallable.html |    2 +-
 .../RpcRetryingCallerWithReadReplicas.html      |    2 +-
 .../hadoop/hbase/client/VersionInfoUtil.html    |   42 +-
 .../apache/hadoop/hbase/ipc/RpcCallContext.html |    5 +-
 .../RpcServer.BlockingServiceAndInterface.html  | 4565 +++++++--------
 .../apache/hadoop/hbase/ipc/RpcServer.Call.html | 4565 +++++++--------
 .../ipc/RpcServer.CallQueueTooBigException.html | 4565 +++++++--------
 .../hadoop/hbase/ipc/RpcServer.Connection.html  | 4565 +++++++--------
 .../hbase/ipc/RpcServer.Listener.Reader.html    | 4565 +++++++--------
 .../hadoop/hbase/ipc/RpcServer.Listener.html    | 4565 +++++++--------
 .../hadoop/hbase/ipc/RpcServer.Responder.html   | 4565 +++++++--------
 .../org/apache/hadoop/hbase/ipc/RpcServer.html  | 4565 +++++++--------
 .../LoadIncrementalHFiles.BulkHFileVisitor.html | 1297 +++--
 .../LoadIncrementalHFiles.LoadQueueItem.html    | 1297 +++--
 .../hbase/mapreduce/LoadIncrementalHFiles.html  | 1297 +++--
 ...SRpcServices.RegionScannerCloseCallBack.html | 5511 +++++++++---------
 .../RSRpcServices.RegionScannerHolder.html      | 5511 +++++++++---------
 ...pcServices.RegionScannerShippedCallBack.html | 5511 +++++++++---------
 ...RpcServices.RegionScannersCloseCallBack.html | 5511 +++++++++---------
 .../RSRpcServices.ScannerListener.html          | 5511 +++++++++---------
 .../hbase/regionserver/RSRpcServices.html       | 5511 +++++++++---------
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |  180 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |  180 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |  180 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |   52 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   90 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |   90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   90 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |   28 +-
 distribution-management.html                    |    4 +-
 export_control.html                             |    4 +-
 hbase-annotations/checkstyle.html               |    6 +-
 hbase-annotations/dependencies.html             |    6 +-
 hbase-annotations/dependency-convergence.html   |    6 +-
 hbase-annotations/dependency-info.html          |    6 +-
 hbase-annotations/dependency-management.html    |    6 +-
 hbase-annotations/distribution-management.html  |    6 +-
 hbase-annotations/index.html                    |    6 +-
 hbase-annotations/integration.html              |    6 +-
 hbase-annotations/issue-tracking.html           |    6 +-
 hbase-annotations/license.html                  |    6 +-
 hbase-annotations/mail-lists.html               |    6 +-
 hbase-annotations/plugin-management.html        |    6 +-
 hbase-annotations/plugins.html                  |    6 +-
 hbase-annotations/project-info.html             |    6 +-
 hbase-annotations/project-reports.html          |    6 +-
 hbase-annotations/project-summary.html          |    6 +-
 hbase-annotations/source-repository.html        |    6 +-
 hbase-annotations/team-list.html                |    6 +-
 hbase-spark/checkstyle.html                     |    6 +-
 hbase-spark/dependencies.html                   |    6 +-
 hbase-spark/dependency-convergence.html         |    6 +-
 hbase-spark/dependency-info.html                |    6 +-
 hbase-spark/dependency-management.html          |    6 +-
 hbase-spark/distribution-management.html        |    6 +-
 hbase-spark/index.html                          |    6 +-
 hbase-spark/integration.html                    |    6 +-
 hbase-spark/issue-tracking.html                 |    6 +-
 hbase-spark/license.html                        |    6 +-
 hbase-spark/mail-lists.html                     |    6 +-
 hbase-spark/plugin-management.html              |    6 +-
 hbase-spark/plugins.html                        |    6 +-
 hbase-spark/project-info.html                   |    6 +-
 hbase-spark/project-reports.html                |    6 +-
 hbase-spark/project-summary.html                |    6 +-
 hbase-spark/source-repository.html              |    6 +-
 hbase-spark/team-list.html                      |    6 +-
 index.html                                      |    6 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 modules.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/index-all.html                   |   16 +-
 .../hbase/client/TestMultiRespectsLimits.html   |   36 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    6 +-
 ...ransactionOnCluster.MyMasterRpcServices.html |    2 +-
 ...rHeartbeatMessages.HeartbeatRPCServices.html |    2 +-
 ...ransactionOnCluster.MyMasterRpcServices.html |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    2 +-
 .../BaseTestHBaseFsck.MasterSyncObserver.html   |   12 +-
 .../BaseTestHBaseFsck.MockErrorReporter.html    |   34 +-
 .../hadoop/hbase/util/BaseTestHBaseFsck.html    |  216 +-
 .../hadoop/hbase/util/TestHBaseFsckMOB.html     |    2 +-
 .../hadoop/hbase/util/TestHBaseFsckOneRS.html   |  262 +-
 .../hbase/util/TestHBaseFsckReplicas.html       |    2 +-
 .../hadoop/hbase/util/TestHBaseFsckTwoRS.html   |    2 +-
 .../hbase/client/TestMultiRespectsLimits.html   |  229 +-
 .../BaseTestHBaseFsck.MasterSyncObserver.html   | 1523 ++---
 .../BaseTestHBaseFsck.MockErrorReporter.html    | 1523 ++---
 .../hadoop/hbase/util/BaseTestHBaseFsck.html    | 1523 ++---
 .../hadoop/hbase/util/TestHBaseFsckOneRS.html   | 3180 +++++-----
 .../hbase/client/TestMultiRespectsLimits.html   |  229 +-
 .../hadoop/hbase/util/BaseTestHBaseFsck.html    | 1523 ++---
 .../hadoop/hbase/util/TestHBaseFsckOneRS.html   | 3180 +++++-----
 xref/org/apache/hadoop/hbase/client/HTable.html |    2 +-
 .../RpcRetryingCallerWithReadReplicas.html      |    2 +-
 .../hadoop/hbase/client/VersionInfoUtil.html    |   42 +-
 .../apache/hadoop/hbase/ipc/RpcCallContext.html |    5 +-
 xref/org/apache/hadoop/hbase/ipc/RpcServer.html | 4565 +++++++--------
 .../hbase/mapreduce/LoadIncrementalHFiles.html  | 1297 +++--
 .../hadoop/hbase/protobuf/ProtobufUtil.html     |  104 +-
 .../hbase/regionserver/RSRpcServices.html       | 5511 +++++++++---------
 .../hbase/tmpl/common/TaskMonitorTmpl.html      |   60 +-
 .../hbase/tmpl/common/TaskMonitorTmplImpl.html  |   16 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |  180 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |   52 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   90 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |   28 +-
 187 files changed, 51783 insertions(+), 51688 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index fa06b8b..6bde06b 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -600,7 +600,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 93cf7c3..60ee03d 100644
Binary files a/apache_hbase_reference_guide.pdf and b/apache_hbase_reference_guide.pdf differ

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index 28d4317..514798d 100644
--- a/apache_hbase_reference_guide.pdfmarks
+++ b/apache_hbase_reference_guide.pdfmarks
@@ -2,8 +2,8 @@
   /Author (Apache HBase Team)
   /Subject ()
   /Keywords ()
-  /ModDate (D:20151217150604)
-  /CreationDate (D:20151217150604)
+  /ModDate (D:20151218145710)
+  /CreationDate (D:20151218145710)
   /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
   /Producer ()
   /DOCINFO pdfmark

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/apidocs/org/apache/hadoop/hbase/client/class-use/Table.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/class-use/Table.html b/apidocs/org/apache/hadoop/hbase/client/class-use/Table.html
index d36ecd6..4444f13 100644
--- a/apidocs/org/apache/hadoop/hbase/client/class-use/Table.html
+++ b/apidocs/org/apache/hadoop/hbase/client/class-use/Table.html
@@ -243,7 +243,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">LoadIncrementalHFiles.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfofDir,
+<td class="colLast"><span class="strong">LoadIncrementalHFiles.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfilesDir,
                                   <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;queue,
                                   boolean&nbsp;validateHFile)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/apidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html b/apidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
index 2f0fd8e..4f7b7cf 100644
--- a/apidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
+++ b/apidocs/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
@@ -230,7 +230,7 @@ implements org.apache.hadoop.util.Tool</pre>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfofDir,
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfilesDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;queue,
                                   boolean&nbsp;validateHFile)</code>
@@ -405,7 +405,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareHFileQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.430">prepareHFileQueue</a>(org.apache.hadoop.fs.Path&nbsp;hfofDir,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.431">prepareHFileQueue</a>(org.apache.hadoop.fs.Path&nbsp;hfilesDir,
                      <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;queue,
                      boolean&nbsp;validateHFile)
@@ -413,7 +413,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <div class="block">Prepare a collection of <code>LoadIncrementalHFiles.LoadQueueItem</code> from list of source hfiles contained in the
  passed directory and validates whether the prepared queue has all the valid table column
  families in it.</div>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>hfilesDir</code> - directory containing list of hfiles to be loaded into the table</dd><dd><code>table</code> - table to which hfiles should be loaded</dd><dd><code>queue</code> - queue which needs to be loaded into the table</dd>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>hfilesDir</code> - directory containing list of hfiles to be loaded into the table</dd><dd><code>table</code> - table to which hfiles should be loaded</dd><dd><code>queue</code> - queue which needs to be loaded into the table</dd><dd><code>validateHFile</code> - if true hfiles will be validated for its format</dd>
 <dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - If any I/O or network error occurred</dd></dl>
 </li>
@@ -424,7 +424,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>loadHFileQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.485">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.486">loadHFileQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                   <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;queue,
                   <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;startEndKeys)
@@ -443,7 +443,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadPhase</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.505">bulkLoadPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.506">bulkLoadPhase</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                  <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
                  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;queue,
@@ -462,7 +462,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>splitStoreFile</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.628">splitStoreFile</a>(org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&nbsp;item,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.629">splitStoreFile</a>(org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&nbsp;item,
                                                                                          <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                                                                          byte[]&nbsp;startKey,
                                                                                          byte[]&nbsp;splitKey)
@@ -477,7 +477,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>groupOrSplit</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.675">groupOrSplit</a>(com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;regionGroups,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.676">groupOrSplit</a>(com.google.common.collect.Multimap&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>,org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;regionGroups,
                                                                                        org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&nbsp;item,
                                                                                        <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                                                                        <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;startEndKeys)
@@ -498,7 +498,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>tryAtomicRegionLoad</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.769">tryAtomicRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.770">tryAtomicRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;conn,
                                                                                               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                                                               byte[]&nbsp;first,
                                                                                               <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.LoadQueueItem&gt;&nbsp;lqis)
@@ -523,7 +523,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>inferBoundaries</h4>
-<pre>public static&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.946">inferBoundaries</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;bdryMap)</pre>
+<pre>public static&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.947">inferBoundaries</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;bdryMap)</pre>
 </li>
 </ul>
 <a name="run(java.lang.String[])">
@@ -532,7 +532,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1022">run</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1023">run</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -547,7 +547,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1056">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1057">main</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -559,7 +559,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setBulkToken</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1071">setBulkToken</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stagingDir)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#line.1072">setBulkToken</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stagingDir)</pre>
 <div class="block">Called from replication sink, where it manages bulkToken(staging directory) by itself. This is
  used only when <code>SecureBulkLoadEndpoint</code> is configured in hbase.coprocessor.region.classes
  property. This directory is used as a temporary directory where all files are initially


[28/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html
index 5952d6a..7c00453 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html
@@ -433,654 +433,655 @@
 <span class="sourceLineNo">425</span>   * @param hfilesDir directory containing list of hfiles to be loaded into the table<a name="line.425"></a>
 <span class="sourceLineNo">426</span>   * @param table table to which hfiles should be loaded<a name="line.426"></a>
 <span class="sourceLineNo">427</span>   * @param queue queue which needs to be loaded into the table<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @throws IOException If any I/O or network error occurred<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public void prepareHFileQueue(Path hfofDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      boolean validateHFile) throws IOException {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    discoverLoadQueue(queue, hfofDir, validateHFile);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private ExecutorService createExecutorService() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return pool;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for (HColumnDescriptor family : families) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      familyNames.add(family.getNameAsString());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    while (queueIter.hasNext()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      LoadQueueItem lqi = queueIter.next();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        unmatchedFamilies.add(familyNameInHFile);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      String msg =<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              + familyNames;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      LOG.error(msg);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      throw new IOException(msg);<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><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  /**<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * {@link<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @param table Table to which these hfiles should be loaded to<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param conn Connection to use<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    ExecutorService pool = null;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      pool = createExecutorService();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (pool != null) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        pool.shutdown();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>  /**<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * them.  Any failures are re-queued for another pass with the<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * groupOrSplitPhase.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // atomically bulk load the groups.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      final byte[] first = e.getKey().array();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        @Override<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.517"></a>
-<span class="sourceLineNo">518</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return toRetry;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      };<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      try {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>        // LQIs that are requeued to be regrouped.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        queue.addAll(toRetry);<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>      } catch (ExecutionException e1) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        Throwable t = e1.getCause();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (t instanceof IOException) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // At this point something unrecoverable has happened.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          // TODO Implement bulk load recovery<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        throw new IllegalStateException(t);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      } catch (InterruptedException e1) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    for (Entry&lt;ByteBuffer,<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      for (LoadQueueItem lqi: lqis) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        if (count == null) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>          count = new MutableInt();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>          filesMap.put(lqi.family, count);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>        }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        count.increment();<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            + " of region with start key "<a name="line.565"></a>
-<span class="sourceLineNo">566</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          return false;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   */<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    // phase because of the puts that happen in futures.<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    // drain LQIs and figure out bulk load groups<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    while (!queue.isEmpty()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      final LoadQueueItem item = queue.remove();<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          return splits;<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        }<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      };<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      splittingFutures.add(pool.submit(call));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    // get all the results.  All grouping and splitting must finish before<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    // we can attempt the atomic loads.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      try {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        if (splits != null) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          queue.addAll(splits);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      } catch (ExecutionException e1) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        Throwable t = e1.getCause();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        if (t instanceof IOException) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          LOG.error("IOException during splitting", e1);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        throw new IllegalStateException(t);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      } catch (InterruptedException e1) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<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>    return regionGroups;<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>  // unique file name for the table<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  private String getUniqueName() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Table table, byte[] startKey,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      byte[] splitKey) throws IOException {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    final Path hfilePath = item.hfilePath;<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    // above.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    final String TMP_DIR = "_tmp";<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    Path tmpDir = item.hfilePath.getParent();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    if (!tmpDir.getName().equals(TMP_DIR)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      tmpDir = new Path(tmpDir, TMP_DIR);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    LOG.info("HFile at " + hfilePath + " no longer fits inside a single " +<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    "region. Splitting...");<a name="line.642"></a>
-<span class="sourceLineNo">643</span><a name="line.643"></a>
-<span class="sourceLineNo">644</span>    String uniqueName = getUniqueName();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    HColumnDescriptor familyDesc = table.getTableDescriptor().getFamily(item.family);<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    Path botOut = new Path(tmpDir, uniqueName + ".bottom");<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    Path topOut = new Path(tmpDir, uniqueName + ".top");<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    splitStoreFile(getConf(), hfilePath, familyDesc, splitKey, botOut, topOut);<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>    FileSystem fs = tmpDir.getFileSystem(getConf());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    fs.setPermission(tmpDir, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    fs.setPermission(botOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    fs.setPermission(topOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span>    // Add these back at the *front* of the queue, so there's a lower<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // chance that the region will just split again before we get there.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    List&lt;LoadQueueItem&gt; lqis = new ArrayList&lt;LoadQueueItem&gt;(2);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    lqis.add(new LoadQueueItem(item.family, botOut));<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    lqis.add(new LoadQueueItem(item.family, topOut));<a name="line.660"></a>
-<span class="sourceLineNo">661</span><a name="line.661"></a>
-<span class="sourceLineNo">662</span>    LOG.info("Successfully split into new HFiles " + botOut + " and " + topOut);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    return lqis;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * Attempt to assign the given load queue item into its target region group.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * If the hfile boundary no longer fits into a region, physically splits<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * the hfile such that the new bottom half will fit and returns the list of<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * LQI's corresponding to the resultant hfiles.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   *<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * protected for testing<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @throws IOException<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>  protected List&lt;LoadQueueItem&gt; groupOrSplit(Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups,<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      final LoadQueueItem item, final Table table,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys)<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      throws IOException {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    final Path hfilePath = item.hfilePath;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    // fs is the source filesystem<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    if (fs == null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      fs = hfilePath.getFileSystem(getConf());<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    HFile.Reader hfr = HFile.createReader(fs, hfilePath,<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        new CacheConfig(getConf()), getConf());<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    final byte[] first, last;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    try {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      hfr.loadFileInfo();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      first = hfr.getFirstRowKey();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      last = hfr.getLastRowKey();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }  finally {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      hfr.close();<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>    LOG.info("Trying to load hfile=" + hfilePath +<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        " first=" + Bytes.toStringBinary(first) +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        " last="  + Bytes.toStringBinary(last));<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (first == null || last == null) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      assert first == null &amp;&amp; last == null;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      // TODO what if this is due to a bad HFile?<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      LOG.info("hfile " + hfilePath + " has no entries, skipping");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      return null;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    }<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (Bytes.compareTo(first, last) &gt; 0) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new IllegalArgumentException(<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      "Invalid range: " + Bytes.toStringBinary(first) +<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      " &gt; " + Bytes.toStringBinary(last));<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    int idx = Arrays.binarySearch(startEndKeys.getFirst(), first,<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        Bytes.BYTES_COMPARATOR);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    if (idx &lt; 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      // not on boundary, returns -(insertion index).  Calculate region it<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // would be in.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      idx = -(idx + 1) - 1;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    final int indexForCallable = idx;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    /**<a name="line.718"></a>
-<span class="sourceLineNo">719</span>     * we can consider there is a region hole in following conditions. 1) if idx &lt; 0,then first<a name="line.719"></a>
-<span class="sourceLineNo">720</span>     * region info is lost. 2) if the endkey of a region is not equal to the startkey of the next<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * region. 3) if the endkey of the last region is not empty.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    if (indexForCallable &lt; 0) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      throw new IOException("The first region info for table "<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          + table.getName()<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    } else if ((indexForCallable == startEndKeys.getFirst().length - 1)<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        &amp;&amp; !Bytes.equals(startEndKeys.getSecond()[indexForCallable], HConstants.EMPTY_BYTE_ARRAY)) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      throw new IOException("The last region info for table "<a name="line.729"></a>
-<span class="sourceLineNo">730</span>          + table.getName()<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    } else if (indexForCallable + 1 &lt; startEndKeys.getFirst().length<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        &amp;&amp; !(Bytes.compareTo(startEndKeys.getSecond()[indexForCallable],<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          startEndKeys.getFirst()[indexForCallable + 1]) == 0)) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      throw new IOException("The endkey of one region for table "<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          + table.getName()<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          + " is not equal to the startkey of the next region in hbase:meta."<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          + "Please use hbck tool to fix it first.");<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>    boolean lastKeyInRange =<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      Bytes.compareTo(last, startEndKeys.getSecond()[idx]) &lt; 0 ||<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      Bytes.equals(startEndKeys.getSecond()[idx], HConstants.EMPTY_BYTE_ARRAY);<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    if (!lastKeyInRange) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      List&lt;LoadQueueItem&gt; lqis = splitStoreFile(item, table,<a name="line.745"></a>
-<span class="sourceLineNo">746</span>          startEndKeys.getFirst()[indexForCallable],<a name="line.746"></a>
-<span class="sourceLineNo">747</span>          startEndKeys.getSecond()[indexForCallable]);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      return lqis;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>    // group regions.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    regionGroups.put(ByteBuffer.wrap(startEndKeys.getFirst()[idx]), item);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return null;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * Attempts to do an atomic load of many hfiles into a region.  If it fails,<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   * it returns a list of hfiles that need to be retried.  If it is successful<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * it will return an empty list.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   *<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * NOTE: To maintain row atomicity guarantees, region server callable should<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * succeed atomically and fails atomically.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   *<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * Protected for testing.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @return empty list if success, list of items to retry on recoverable<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * failure<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  protected List&lt;LoadQueueItem&gt; tryAtomicRegionLoad(final Connection conn,<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      final TableName tableName, final byte[] first, final Collection&lt;LoadQueueItem&gt; lqis)<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  throws IOException {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; famPaths =<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;(lqis.size());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    for (LoadQueueItem lqi : lqis) {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      famPaths.add(Pair.newPair(lqi.family, lqi.hfilePath.toString()));<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final RegionServerCallable&lt;Boolean&gt; svrCallable =<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        new RegionServerCallable&lt;Boolean&gt;(conn, tableName, first) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      @Override<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      public Boolean call(int callTimeout) throws Exception {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        SecureBulkLoadClient secureClient = null;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        boolean success = false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span>        try {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("Going to connect to server " + getLocation() + " for row "<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              + Bytes.toStringBinary(getRow()) + " with hfile group " + famPaths);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>          byte[] regionName = getLocation().getRegionInfo().getRegionName();<a name="line.788"></a>
-<span class="sourceLineNo">789</span>          if (!isSecureBulkLoadEndpointAvailable()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            success = ProtobufUtil.bulkLoadHFile(getStub(), famPaths, regionName, assignSeqIds);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>          } else {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            try (Table table = conn.getTable(getTableName())) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>              secureClient = new SecureBulkLoadClient(table);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              success = secureClient.bulkLoadHFiles(famPaths, fsDelegationToken.getUserToken(),<a name="line.794"></a>
-<span class="sourceLineNo">795</span>                bulkToken, getLocation().getRegionInfo().getStartKey());<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          }<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          return success;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        } finally {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          //Best effort copying of files that might not have been imported<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          //from the staging directory back to original location<a name="line.801"></a>
-<span class="sourceLineNo">802</span>          //in user directory<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          if(secureClient != null &amp;&amp; !success) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            FileSystem targetFs = FileSystem.get(getConf());<a name="line.804"></a>
-<span class="sourceLineNo">805</span>         // fs is the source filesystem<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if(fs == null) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              fs = lqis.iterator().next().hfilePath.getFileSystem(getConf());<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span>            // Check to see if the source and target filesystems are the same<a name="line.809"></a>
-<span class="sourceLineNo">810</span>            // If they are the same filesystem, we will try move the files back<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            // because previously we moved them to the staging directory.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>            if (FSHDFSUtils.isSameHdfs(getConf(), fs, targetFs)) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>              for(Pair&lt;byte[], String&gt; el : famPaths) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                Path hfileStagingPath = null;<a name="line.814"></a>
-<span class="sourceLineNo">815</span>                Path hfileOrigPath = new Path(el.getSecond());<a name="line.815"></a>
-<span class="sourceLineNo">816</span>                try {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>                  hfileStagingPath= new Path(secureClient.getStagingPath(bulkToken, el.getFirst()),<a name="line.817"></a>
-<span class="sourceLineNo">818</span>                    hfileOrigPath.getName());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>                  if(targetFs.rename(hfileStagingPath, hfileOrigPath)) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>                    LOG.debug("Moved back file " + hfileOrigPath + " from " +<a name="line.820"></a>
-<span class="sourceLineNo">821</span>                        hfileStagingPath);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>                  } else if(targetFs.exists(hfileStagingPath)){<a name="line.822"></a>
-<span class="sourceLineNo">823</span>                    LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.823"></a>
-<span class="sourceLineNo">824</span>                        hfileStagingPath);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>                  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>                } catch(Exception ex) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>                  LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.827"></a>
-<span class="sourceLineNo">828</span>                      hfileStagingPath, ex);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>                }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>              }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>            }<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          }<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    };<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>    try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      List&lt;LoadQueueItem&gt; toRetry = new ArrayList&lt;LoadQueueItem&gt;();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      Configuration conf = getConf();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      boolean success = RpcRetryingCallerFactory.instantiate(conf,<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          null).&lt;Boolean&gt; newCaller()<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          .callWithRetries(svrCallable, Integer.MAX_VALUE);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      if (!success) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        LOG.warn("Attempt to bulk load region containing "<a name="line.844"></a>
-<span class="sourceLineNo">845</span>            + Bytes.toStringBinary(first) + " into table "<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            + tableName  + " with files " + lqis<a name="line.846"></a>
-<span class="sourceLineNo">847</span>            + " failed.  This is recoverable and they will be retried.");<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        toRetry.addAll(lqis); // return lqi's to retry<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // success<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      return toRetry;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    } catch (IOException e) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      LOG.error("Encountered unrecoverable error from region server, additional details: "<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          + svrCallable.getExceptionMessageAdditionalDetail(), e);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>  }<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span>  private boolean isSecureBulkLoadEndpointAvailable() {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    String classes = getConf().get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, "");<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    return classes.contains("org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint");<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>  /**<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * Split a storefile into a top and bottom half, maintaining<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * the metadata, recreating bloom filters, etc.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   */<a name="line.867"></a>
-<span class="sourceLineNo">868</span>  static void splitStoreFile(<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      Configuration conf, Path inFile,<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      HColumnDescriptor familyDesc, byte[] splitKey,<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      Path bottomOut, Path topOut) throws IOException<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    // Open reader with no block cache, and not in-memory<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    Reference topReference = Reference.createTopReference(splitKey);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    Reference bottomReference = Reference.createBottomReference(splitKey);<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    copyHFileHalf(conf, inFile, topOut, topReference, familyDesc);<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    copyHFileHalf(conf, inFile, bottomOut, bottomReference, familyDesc);<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  }<a name="line.879"></a>
-<span class="sourceLineNo">880</span><a name="line.880"></a>
-<span class="sourceLineNo">881</span>  /**<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * Copy half of an HFile into a new HFile.<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   */<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private static void copyHFileHalf(<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      Configuration conf, Path inFile, Path outFile, Reference reference,<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      HColumnDescriptor familyDescriptor)<a name="line.886"></a>
-<span class="sourceLineNo">887</span>  throws IOException {<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    FileSystem fs = inFile.getFileSystem(conf);<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    CacheConfig cacheConf = new CacheConfig(conf);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    HalfStoreFileReader halfReader = null;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    StoreFile.Writer halfWriter = null;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    try {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      halfReader = new HalfStoreFileReader(fs, inFile, cacheConf, reference, conf);<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      Map&lt;byte[], byte[]&gt; fileInfo = halfReader.loadFileInfo();<a name="line.894"></a>
-<span class="sourceLineNo">895</span><a name="line.895"></a>
-<span class="sourceLineNo">896</span>      int blocksize = familyDescriptor.getBlocksize();<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      Algorithm compression = familyDescriptor.getCompressionType();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      BloomType bloomFilterType = familyDescriptor.getBloomFilterType();<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      HFileContext hFileContext = new HFileContextBuilder()<a name="line.899"></a>
-<span class="sourceLineNo">900</span>                                  .withCompression(compression)<a name="line.900"></a>
-<span class="sourceLineNo">901</span>                                  .withChecksumType(HStore.getChecksumType(conf))<a name="line.901"></a>
-<span class="sourceLineNo">902</span>                                  .withBytesPerCheckSum(HStore.getBytesPerChecksum(conf))<a name="line.902"></a>
-<span class="sourceLineNo">903</span>                                  .withBlockSize(blocksize)<a name="line.903"></a>
-<span class="sourceLineNo">904</span>                                  .withDataBlockEncoding(familyDescriptor.getDataBlockEncoding())<a name="line.904"></a>
-<span class="sourceLineNo">905</span>                                  .build();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      halfWriter = new StoreFile.WriterBuilder(conf, cacheConf,<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          fs)<a name="line.907"></a>
-<span class="sourceLineNo">908</span>              .withFilePath(outFile)<a name="line.908"></a>
-<span class="sourceLineNo">909</span>              .withBloomType(bloomFilterType)<a name="line.909"></a>
-<span class="sourceLineNo">910</span>              .withFileContext(hFileContext)<a name="line.910"></a>
-<span class="sourceLineNo">911</span>              .build();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      HFileScanner scanner = halfReader.getScanner(false, false, false);<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      scanner.seekTo();<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      do {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>        halfWriter.append(scanner.getCell());<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      } while (scanner.next());<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>      for (Map.Entry&lt;byte[],byte[]&gt; entry : fileInfo.entrySet()) {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        if (shouldCopyHFileMetaKey(entry.getKey())) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>          halfWriter.appendFileInfo(entry.getKey(), entry.getValue());<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    } finally {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      if (halfWriter != null) halfWriter.close();<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      if (halfReader != null) halfReader.close(cacheConf.shouldEvictOnClose());<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    }<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  private static boolean shouldCopyHFileMetaKey(byte[] key) {<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return !HFile.isReservedFileInfoKey(key);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  /*<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * Infers region boundaries for a new table.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * Parameter:<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   *   bdryMap is a map between keys to an integer belonging to {+1, -1}<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   *     If a key is a start key of a file, then it maps to +1<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   *     If a key is an end key of a file, then it maps to -1<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * Algo:<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * 1) Poll on the keys in order:<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   *    a) Keep adding the mapped values to these keys (runningSum)<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   *    b) Each time runningSum reaches 0, add the start Key from when the runningSum had started to<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   *       a boundary list.<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * 2) Return the boundary list.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   */<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  public static byte[][] inferBoundaries(TreeMap&lt;byte[], Integer&gt; bdryMap) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    ArrayList&lt;byte[]&gt; keysArray = new ArrayList&lt;byte[]&gt;();<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    int runningValue = 0;<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    byte[] currStartKey = null;<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    boolean firstBoundary = true;<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>    for (Map.Entry&lt;byte[], Integer&gt; item: bdryMap.entrySet()) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      if (runningValue == 0) currStartKey = item.getKey();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      runningValue += item.getValue();<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      if (runningValue == 0) {<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        if (!firstBoundary) keysArray.add(currStartKey);<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        firstBoundary = false;<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      }<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    return keysArray.toArray(new byte[0][0]);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  }<a name="line.962"></a>
-<span class="sourceLineNo">963</span><a name="line.963"></a>
-<span class="sourceLineNo">964</span>  /*<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   * If the table is created for the first time, then "completebulkload" reads the files twice.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>   * More modifications necessary if we want to avoid doing it.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>   */<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  private void createTable(TableName tableName, String dirPath, Admin admin) throws Exception {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    final Path hfofDir = new Path(dirPath);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    final FileSystem fs = hfofDir.getFileSystem(getConf());<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // Add column families<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Build a set of keys<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    final HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    final TreeMap&lt;byte[], Integer&gt; map = new TreeMap&lt;byte[], Integer&gt;(Bytes.BYTES_COMPARATOR);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    visitBulkHFiles(fs, hfofDir, new BulkHFileVisitor&lt;HColumnDescriptor&gt;() {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      @Override<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      public HColumnDescriptor bulkFamily(final byte[] familyName) {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        HColumnDescriptor hcd = new HColumnDescriptor(familyName);<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        htd.addFamily(hcd);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        return hcd;<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      @Override<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      public void bulkHFile(final HColumnDescriptor hcd, final FileStatus hfileStatus)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          throws IOException {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        Path hfile = hfileStatus.getPath();<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        HFile.Reader reader = HFile.createReader(fs, hfile,<a name="line.987"></a>
-<span class="sourceLineNo">988</span>            new CacheConfig(getConf()), getConf());<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>          if (hcd.getCompressionType() != reader.getFileContext().getCompression()) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            hcd.setCompressionType(reader.getFileContext().getCompression());<a name="line.991"></a>
-<span class="sourceLineNo">992</span>            LOG.info("Setting compression " + hcd.getCompressionType().name() +<a name="line.992"></a>
-<span class="sourceLineNo">993</span>                     " for family " + hcd.toString());<a name="line.993"></a>
-<span class="sourceLineNo">994</span>          }<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          reader.loadFileInfo();<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          byte[] first = reader.getFirstRowKey();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          byte[] last  = reader.getLastRowKey();<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>          LOG.info("Trying to figure out region boundaries hfile=" + hfile +<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            " first=" + Bytes.toStringBinary(first) +<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>            " last="  + Bytes.toStringBinary(last));<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span><a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          // To eventually infer start key-end key boundaries<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>          Integer value = map.containsKey(first)? map.get(first):0;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>          map.put(first, value+1);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          value = map.containsKey(last)? map.get(last):0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>          map.put(last, value-1);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        } finally {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          reader.close();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    });<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    byte[][] keys = LoadIncrementalHFiles.inferBoundaries(map);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    admin.createTable(htd, keys);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    LOG.info("Table "+ tableName +" is available!!");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @Override<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public int run(String[] args) throws Exception {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    if (args.length != 2) {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      usage();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>      return -1;<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    }<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span><a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    initialize();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    try (Connection connection = ConnectionFactory.createConnection(getConf());<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        Admin admin = connection.getAdmin()) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      String dirPath = args[0];<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      TableName tableName = TableName.valueOf(args[1]);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span><a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      boolean tableExists = admin.tableExists(tableName);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      if (!tableExists) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        if ("yes".equalsIgnoreCase(getConf().get(CREATE_TABLE_CONF_KEY, "yes"))) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>          this.createTable(tableName, dirPath, admin);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        } else {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>          String errorMsg = format("Table '%s' does not exist.", tableName);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>          LOG.error(errorMsg);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>          throw new TableNotFoundException(errorMsg);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      Path hfofDir = new Path(dirPath);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      try (Table table = connection.getTable(tableName);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          RegionLocator locator = connection.getRegionLocator(tableName)) {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          doBulkLoad(hfofDir, admin, table, locator);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    return 0;<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  public static void main(String[] args) throws Exception {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    Configuration conf = HBaseConfiguration.create();<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    int ret = ToolRunner.run(conf, new LoadIncrementalHFiles(), args);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    System.exit(ret);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>  }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  /**<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   * Called from replication sink, where it manages bulkToken(staging directory) by itself. This is<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   * used only when {@link SecureBulkLoadEndpoint} is configured in hbase.coprocessor.region.classes<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * property. This directory is used as a temporary directory where all files are initially<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   * copied/moved from user given directory, set all the required file permissions and then from<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>   * their it is finally loaded into a table. This should be set only when, one would like to manage<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>   * the staging directory by itself. Otherwise this tool will handle this by itself.<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * @param stagingDir staging directory path<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   */<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  public void setBulkToken(String stagingDir) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    this.bulkToken = stagingDir;<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>  }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span><a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>}<a name="line.1075"></a>
+<span class="sourceLineNo">428</span>   * @param validateHFile if true hfiles will be validated for its format<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException If any I/O or network error occurred<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public void prepareHFileQueue(Path hfilesDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      boolean validateHFile) throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    discoverLoadQueue(queue, hfilesDir, validateHFile);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private ExecutorService createExecutorService() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return pool;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      throws IOException {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    for (HColumnDescriptor family : families) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      familyNames.add(family.getNameAsString());<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    while (queueIter.hasNext()) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LoadQueueItem lqi = queueIter.next();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unmatchedFamilies.add(familyNameInHFile);<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>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      String msg =<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.468"></a>
+<span class="sourceLineNo">469</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              + familyNames;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      LOG.error(msg);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      throw new IOException(msg);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * {@link<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param table Table to which these hfiles should be loaded to<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @param conn Connection to use<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    ExecutorService pool = null;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    try {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      pool = createExecutorService();<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } finally {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      if (pool != null) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>        pool.shutdown();<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>  }<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>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * them.  Any failures are re-queued for another pass with the<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * groupOrSplitPhase.<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    // atomically bulk load the groups.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      final byte[] first = e.getKey().array();<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.518"></a>
+<span class="sourceLineNo">519</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return toRetry;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      };<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      try {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>        // LQIs that are requeued to be regrouped.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        queue.addAll(toRetry);<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>      } catch (ExecutionException e1) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        Throwable t = e1.getCause();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        if (t instanceof IOException) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          // At this point something unrecoverable has happened.<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          // TODO Implement bulk load recovery<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        throw new IllegalStateException(t);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (InterruptedException e1) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (Entry&lt;ByteBuffer,<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      for (LoadQueueItem lqi: lqis) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>        if (count == null) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          count = new MutableInt();<a name="line.559"></a>
+<span class="sourceLineNo">560</span>          filesMap.put(lqi.family, count);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>        }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>        count.increment();<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.563"></a>
+<span class="sourceLineNo">564</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.564"></a>
+<span class="sourceLineNo">565</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.565"></a>
+<span class="sourceLineNo">566</span>            + " of region with start key "<a name="line.566"></a>
+<span class="sourceLineNo">567</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.567"></a>
+<span class="sourceLineNo">568</span>          return false;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>        }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    return true;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    // phase because of the puts that happen in futures.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>    // drain LQIs and figure out bulk load groups<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    while (!queue.isEmpty()) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      final LoadQueueItem item = queue.remove();<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>          return splits;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        }<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      };<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      splittingFutures.add(pool.submit(call));<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    // get all the results.  All grouping and splitting must finish before<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    // we can attempt the atomic loads.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        if (splits != null) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>          queue.addAll(splits);<a name="line.606"></a>
+<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      } catch (ExecutionException e1) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>        Throwable t = e1.getCause();<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        if (t instanceof IOException) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          LOG.error("IOException during splitting", e1);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
+<span class="sourceLineNo">614</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        throw new IllegalStateException(t);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      } catch (InterruptedException e1) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return regionGroups;<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>  // unique file name for the table<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private String getUniqueName() {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.626"></a>
+<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      final Table table, byte[] startKey,<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      byte[] splitKey) throws IOException {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    final Path hfilePath = item.hfilePath;<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    // above.<a name="line.635

<TRUNCATED>

[17/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html b/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
index cbef89c..8167eb9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.768">BaseTestHBaseFsck.MockErrorReporter</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.475">BaseTestHBaseFsck.MockErrorReporter</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 </li>
@@ -269,7 +269,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>calledCount</h4>
-<pre>static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.769">calledCount</a></pre>
+<pre>static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.476">calledCount</a></pre>
 </li>
 </ul>
 </li>
@@ -286,7 +286,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BaseTestHBaseFsck.MockErrorReporter</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.768">BaseTestHBaseFsck.MockErrorReporter</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.475">BaseTestHBaseFsck.MockErrorReporter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -303,7 +303,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>clear</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.772">clear</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.479">clear</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>clear</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -316,7 +316,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>report</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.777">report</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.484">report</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>report</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -329,7 +329,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.782">reportError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.489">reportError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>reportError</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -342,7 +342,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.787">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.494">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -356,7 +356,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.792">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.499">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                org.apache.hadoop.hbase.util.HBaseFsck.TableInfo&nbsp;table)</pre>
 <dl>
@@ -371,7 +371,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.797">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.504">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                org.apache.hadoop.hbase.util.HBaseFsck.TableInfo&nbsp;table,
                org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo&nbsp;info)</pre>
@@ -387,7 +387,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.803">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.510">reportError</a>(org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&nbsp;errorCode,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                org.apache.hadoop.hbase.util.HBaseFsck.TableInfo&nbsp;table,
                org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo&nbsp;info1,
@@ -404,7 +404,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>summarize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.809">summarize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.516">summarize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>summarize</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -417,7 +417,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>detail</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.814">detail</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;details)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.521">detail</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;details)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>detail</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -430,7 +430,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getErrorList</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.819">getErrorList</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.526">getErrorList</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getErrorList</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -443,7 +443,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>progress</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.825">progress</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.532">progress</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>progress</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -456,7 +456,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>print</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.830">print</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.537">print</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>print</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -469,7 +469,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>resetErrors</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.835">resetErrors</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.542">resetErrors</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>resetErrors</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>
@@ -482,7 +482,7 @@ implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tableHasErrors</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.840">tableHasErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck.TableInfo&nbsp;table)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html#line.547">tableHasErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck.TableInfo&nbsp;table)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>tableHasErrors</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html b/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
index a8c7464..75fe853 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.109">BaseTestHBaseFsck</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.87">BaseTestHBaseFsck</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.
 
@@ -387,51 +387,6 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing</a></strong>()</code>
-<div class="block">This creates and fixes a bad table with a missing region -- hole in meta
- and data present but .regioinfino missing (an orphan hdfs region)in the fs.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInHdfs()">testNotInHdfs</a></strong>()</code>
-<div class="block">This creates and fixes a bad table with a region that is in meta but has
- no deployment or data hdfs</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaHole()">testNotInMetaHole</a></strong>()</code>
-<div class="block">This creates fixes a bad table with a hole in meta.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHole</a></strong>()</code>
-<div class="block">This creates and fixes a bad table with a region that is missing meta and
- not assigned to a region server.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir</a></strong>()</code>
-<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
- has removed an colfam dir before the corruption checker got to it.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir</a></strong>()</code>
-<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
- has removed a region dir before the corruption checker got to it.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></strong>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                             org.apache.hadoop.hbase.ServerName&nbsp;sn,
@@ -468,7 +423,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>POOL_SIZE</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.110">POOL_SIZE</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.88">POOL_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.BaseTestHBaseFsck.POOL_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -478,7 +433,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>protected static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.111">LOG</a></pre>
+<pre>protected static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.89">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -487,7 +442,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>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/util/BaseTestHBaseFsck.html#line.112">TEST_UTIL</a></pre>
+<pre>protected static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.90">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -496,7 +451,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>protected static final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.113">conf</a></pre>
+<pre>protected static final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.91">conf</a></pre>
 </li>
 </ul>
 <a name="FAM_STR">
@@ -505,7 +460,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAM_STR</h4>
-<pre>protected static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.114">FAM_STR</a></pre>
+<pre>protected static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.92">FAM_STR</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.BaseTestHBaseFsck.FAM_STR">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -515,7 +470,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAM</h4>
-<pre>protected static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.115">FAM</a></pre>
+<pre>protected static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.93">FAM</a></pre>
 </li>
 </ul>
 <a name="REGION_ONLINE_TIMEOUT">
@@ -524,7 +479,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_ONLINE_TIMEOUT</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.116">REGION_ONLINE_TIMEOUT</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.94">REGION_ONLINE_TIMEOUT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.BaseTestHBaseFsck.REGION_ONLINE_TIMEOUT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -534,7 +489,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>regionStates</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.master.RegionStates <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.117">regionStates</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.master.RegionStates <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.95">regionStates</a></pre>
 </li>
 </ul>
 <a name="tableExecutorService">
@@ -543,7 +498,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tableExecutorService</h4>
-<pre>protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.118">tableExecutorService</a></pre>
+<pre>protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.96">tableExecutorService</a></pre>
 </li>
 </ul>
 <a name="hbfsckExecutorService">
@@ -552,7 +507,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hbfsckExecutorService</h4>
-<pre>protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.119">hbfsckExecutorService</a></pre>
+<pre>protected static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledThreadPoolExecutor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.97">hbfsckExecutorService</a></pre>
 </li>
 </ul>
 <a name="connection">
@@ -561,7 +516,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.client.ClusterConnection <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.120">connection</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.client.ClusterConnection <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.98">connection</a></pre>
 </li>
 </ul>
 <a name="admin">
@@ -570,7 +525,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>admin</h4>
-<pre>protected static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.121">admin</a></pre>
+<pre>protected static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.99">admin</a></pre>
 </li>
 </ul>
 <a name="tbl">
@@ -579,7 +534,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tbl</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.124">tbl</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.Table <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.102">tbl</a></pre>
 </li>
 </ul>
 <a name="SPLITS">
@@ -588,7 +543,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>SPLITS</h4>
-<pre>protected static final&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.125">SPLITS</a></pre>
+<pre>protected static final&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.103">SPLITS</a></pre>
 </li>
 </ul>
 <a name="ROWKEYS">
@@ -597,7 +552,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ROWKEYS</h4>
-<pre>protected static final&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.128">ROWKEYS</a></pre>
+<pre>protected static final&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.106">ROWKEYS</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -606,7 +561,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.890">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.591">name</a></pre>
 </li>
 </ul>
 </li>
@@ -623,7 +578,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BaseTestHBaseFsck</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.109">BaseTestHBaseFsck</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.87">BaseTestHBaseFsck</a>()</pre>
 </li>
 </ul>
 </li>
@@ -640,7 +595,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegion</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.HRegionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.136">createRegion</a>(org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
+<pre>protected&nbsp;org.apache.hadoop.hbase.HRegionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.114">createRegion</a>(org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
                                                byte[]&nbsp;startKey,
                                                byte[]&nbsp;endKey)
                                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -655,7 +610,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>dumpMeta</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.149">dumpMeta</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.127">dumpMeta</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Debugging method to dump the contents of meta.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -668,7 +623,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>undeployRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.160">undeployRegion</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.138">undeployRegion</a>(org.apache.hadoop.hbase.client.Connection&nbsp;conn,
                   org.apache.hadoop.hbase.ServerName&nbsp;sn,
                   org.apache.hadoop.hbase.HRegionInfo&nbsp;hri)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -686,7 +641,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.178">deleteRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.156">deleteRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                 org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
                 byte[]&nbsp;startKey,
                 byte[]&nbsp;endKey,
@@ -708,7 +663,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.193">deleteRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.171">deleteRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                 org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
                 byte[]&nbsp;startKey,
                 byte[]&nbsp;endKey,
@@ -732,7 +687,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupTable</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.266">setupTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.244">setupTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename)
           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Setup a clean table before we start mucking with it.
 
@@ -750,7 +705,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupTableWithRegionReplica</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.277">setupTableWithRegionReplica</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.255">setupTableWithRegionReplica</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename,
                                int&nbsp;replicaCount)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Setup a clean table with a certain region_replica count
@@ -766,7 +721,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMobTable</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.300">setupMobTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.278">setupMobTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename)
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Setup a clean table with a mob-enabled column.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>tablename</code> - The name of a table to be created.</dd>
@@ -780,7 +735,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>countRows</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.321">countRows</a>()
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.299">countRows</a>()
         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Counts the number of row to verify data loss or non-dataloss.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -793,7 +748,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupTable</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.337">cleanupTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.315">cleanupTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tablename)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">delete table in preparation for next test</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>tablename</code> - </dd>
@@ -808,7 +763,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeployedHRIs</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.350">getDeployedHRIs</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.328">getDeployedHRIs</a>(org.apache.hadoop.hbase.client.Admin&nbsp;admin)
                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get region info from local cluster.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -821,85 +776,18 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>findDeployedHSI</h4>
-<pre>org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.372">findDeployedHSI</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;mm,
+<pre>org.apache.hadoop.hbase.ServerName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.350">findDeployedHSI</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.hbase.ServerName,<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;mm,
                                                  org.apache.hadoop.hbase.HRegionInfo&nbsp;hri)</pre>
 <div class="block">Returns the HSI a region info is on.</div>
 </li>
 </ul>
-<a name="testHDFSRegioninfoMissing()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testHDFSRegioninfoMissing</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.389">testHDFSRegioninfoMissing</a>()
-                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block">This creates and fixes a bad table with a missing region -- hole in meta
- and data present but .regioinfino missing (an orphan hdfs region)in the fs.</div>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testNotInMetaOrDeployedHole()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testNotInMetaOrDeployedHole</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.424">testNotInMetaOrDeployedHole</a>()
-                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block">This creates and fixes a bad table with a region that is missing meta and
- not assigned to a region server.</div>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testCleanUpDaughtersNotInMetaAfterFailedSplit()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testCleanUpDaughtersNotInMetaAfterFailedSplit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.456">testCleanUpDaughtersNotInMetaAfterFailedSplit</a>()
-                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testNotInMetaHole()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testNotInMetaHole</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.518">testNotInMetaHole</a>()
-                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block">This creates fixes a bad table with a hole in meta.</div>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testNotInHdfs()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testNotInHdfs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.554">testNotInHdfs</a>()
-                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block">This creates and fixes a bad table with a region that is in meta but has
- no deployment or data hdfs</div>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
 <a name="deleteTableDir(org.apache.hadoop.hbase.TableName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteTableDir</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.585">deleteTableDir</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.359">deleteTableDir</a>(org.apache.hadoop.hbase.TableName&nbsp;table)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -911,7 +799,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedHFile</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.606">getFlushedHFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.376">getFlushedHFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                         org.apache.hadoop.hbase.TableName&nbsp;table)
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">We don't have an easy way to verify that a flush completed, so we loop until we find a
@@ -928,7 +816,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedMobFile</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.632">getFlushedMobFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.402">getFlushedMobFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                           org.apache.hadoop.hbase.TableName&nbsp;table)
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Gets flushed mob files.</div>
@@ -944,7 +832,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createMobFileName</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.654">createMobFileName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;oldFileName)</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.424">createMobFileName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;oldFileName)</pre>
 <div class="block">Creates a new mob file name by the old one.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>oldFileName</code> - The old mob file name.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>The new mob file name.</dd></dl>
@@ -956,7 +844,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doQuarantineTest</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.668">doQuarantineTest</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.438">doQuarantineTest</a>(org.apache.hadoop.hbase.TableName&nbsp;table,
                     org.apache.hadoop.hbase.util.HBaseFsck&nbsp;hbck,
                     int&nbsp;check,
                     int&nbsp;corrupt,
@@ -969,41 +857,13 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
 </li>
 </ul>
-<a name="testQuarantineMissingFamdir()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testQuarantineMissingFamdir</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.711">testQuarantineMissingFamdir</a>()
-                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
- has removed an colfam dir before the corruption checker got to it.</div>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
-<a name="testQuarantineMissingRegionDir()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testQuarantineMissingRegionDir</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.740">testQuarantineMissingRegionDir</a>()
-                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
- has removed a region dir before the corruption checker got to it.</div>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
-</li>
-</ul>
 <a name="deleteMetaRegion(org.apache.hadoop.conf.Configuration, boolean, boolean, boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMetaRegion</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.847">deleteMetaRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.554">deleteMetaRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                     boolean&nbsp;unassign,
                     boolean&nbsp;hdfs,
                     boolean&nbsp;regionInfoOnly)
@@ -1020,7 +880,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.918">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;testUtil,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.617">createTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;testUtil,
                org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
                byte[][]&nbsp;splitKeys)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -1034,7 +894,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deleteTable</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.935">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;testUtil,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.634">deleteTable</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;testUtil,
                org.apache.hadoop.hbase.TableName&nbsp;tableName)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html
index c336d23..656578c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html
@@ -191,7 +191,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInHdfs()">testNotInHdfs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaHole()">testNotInMetaHole</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHol
 e</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">


[22/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 feed20b..abb8a15 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
@@ -31,2767 +31,2812 @@
 <span class="sourceLineNo">023</span>import java.net.BindException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.net.InetSocketAddress;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.net.UnknownHostException;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Iterator;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map.Entry;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.commons.logging.Log;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.logging.LogFactory;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Cell;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HConstants;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ServerName;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.TableName;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Append;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Get;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Put;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.security.User;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.zookeeper.KeeperException;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>import com.google.common.annotations.VisibleForTesting;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import com.google.protobuf.ByteString;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import com.google.protobuf.Message;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import com.google.protobuf.RpcController;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import com.google.protobuf.ServiceException;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@InterfaceAudience.Private<a name="line.194"></a>
-<span class="sourceLineNo">195</span>@SuppressWarnings("deprecation")<a name="line.195"></a>
-<span class="sourceLineNo">196</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ConfigurationObserver {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /** RPC scheduler to use for the region server. */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  final Counter requestCount = new Counter();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  // Server to handle client requests.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  final RpcServerInterface rpcServer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  final InetSocketAddress isa;<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private final HRegionServer regionServer;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private final long maxScannerResultSize;<a name="line.224"></a>
+<span class="sourceLineNo">026</span>import java.nio.ByteBuffer;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.HashMap;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Map.Entry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.NavigableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Set;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.commons.logging.Log;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.commons.logging.LogFactory;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.conf.Configuration;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.Cell;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Append;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Get;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Result;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.security.User;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.zookeeper.KeeperException;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>import com.google.common.annotations.VisibleForTesting;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import com.google.protobuf.ByteString;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import com.google.protobuf.Message;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import com.google.protobuf.RpcController;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import com.google.protobuf.ServiceException;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.195"></a>
+<span class="sourceLineNo">196</span> */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>@InterfaceAudience.Private<a name="line.197"></a>
+<span class="sourceLineNo">198</span>@SuppressWarnings("deprecation")<a name="line.198"></a>
+<span class="sourceLineNo">199</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    ConfigurationObserver {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** RPC scheduler to use for the region server. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  final Counter requestCount = new Counter();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // Server to handle client requests.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  final RpcServerInterface rpcServer;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  final InetSocketAddress isa;<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  // The reference to the priority extraction function<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private final PriorityFunction priority;<a name="line.227"></a>
+<span class="sourceLineNo">226</span>  private final HRegionServer regionServer;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  private final long maxScannerResultSize;<a name="line.227"></a>
 <span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * The RPC timeout period (milliseconds)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private final int rpcTimeout;<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The minimum allowable delta to use for the scan limit<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  private final long minimumScanTimeLimitDelta;<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>   * An Rpc callback for closing a RegionScanner.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    private final RegionScanner scanner;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.scanner = scanner;<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>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void run() throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      this.scanner.close();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    private final String scannerName;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    private final RegionScanner scanner;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final Lease lease;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      this.scannerName = scannerName;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.scanner = scanner;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.lease = lease;<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public void run() throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.scanner.shipped();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (scanners.containsKey(scannerName)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * completion of multiGets.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public void addScanner(RegionScanner scanner) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.scanners.add(scanner);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public void run() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      for (RegionScanner scanner : scanners) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          scanner.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static class RegionScannerHolder {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private RegionScanner s;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    private Region r;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final RpcCallback closeCallBack;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final RpcCallback shippedCallback;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        RpcCallback shippedCallback) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.s = s;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.r = r;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.closeCallBack = closeCallBack;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.shippedCallback = shippedCallback;<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 getNextCallSeq() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      return nextCallSeq.get();<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 void incNextCallSeq() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      nextCallSeq.incrementAndGet();<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 rollbackNextCallSeq() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      nextCallSeq.decrementAndGet();<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * closed<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private class ScannerListener implements LeaseListener {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    private final String scannerName;<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    ScannerListener(final String n) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      this.scannerName = n;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public void leaseExpired() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (rsh != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        RegionScanner s = rsh.s;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        try {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          s.close();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        } catch (IOException e) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          LOG.error("Closing scanner for "<a name="line.373"></a>
-<span class="sourceLineNo">374</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " scanner found, hence no chance to close that related scanner!");<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>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static ResultOrException getResultOrException(<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      final ClientProtos.Result r, final int index, final ClientProtos.RegionLoadStats stats) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return getResultOrException(ResponseConverter.buildActionResult(r, stats), index);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      final ResultOrException.Builder builder, final int index) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return builder.setIndex(index).build();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param mutation Mutation.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param nonceGroup Nonce group from the request.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @returns Nonce used (can be NO_NONCE).<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  private long startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      throws IOException, OperationConflictException {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return HConstants.NO_NONCE;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    boolean canProceed = false;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    try {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    } catch (InterruptedException ex) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    if (!canProceed) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      // TODO: instead, we could convert append/increment to get w/mvcc<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      String message = "The operation with nonce {" + nonceGroup + ", " + mutation.getNonce()<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        + "} on row [" + Bytes.toString(mutation.getRow().toByteArray())<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        + "] may have already completed";<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      throw new OperationConflictException(message);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    return mutation.getNonce();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * Ends nonce operation for a mutation, if needed.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @param mutation Mutation.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      long nonceGroup, boolean success) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<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><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return True if current call supports cellblocks<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private boolean isClientCellBlockSupport() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    RpcCallContext context = RpcServer.getCurrentCall();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final PayloadCarryingRpcController rpcc) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (result == null) return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (isClientCellBlockSupport()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      builder.setResult(pbr);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private void addResults(final ScanResponse.Builder builder, final List&lt;Result&gt; results,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final RpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    builder.setStale(!isDefaultRegion);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (results == null || results.isEmpty()) return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    if (clientCellBlockSupported) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (Result res : results) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        builder.addCellsPerResult(res.size());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        builder.addPartialFlagPerResult(res.isPartial());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      ((PayloadCarryingRpcController)controller).<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        setCellScanner(CellUtil.createCellScanner(results));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    } else {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      for (Result res: results) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        builder.addResults(pbr);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<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>   * Mutate a list of rows atomically.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param region<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param actions<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @throws IOException<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private ClientProtos.RegionLoadStats mutateRows(final Region region,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      final CellScanner cellScanner) throws IOException {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    RowMutations rm = null;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    for (ClientProtos.Action action: actions) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      if (action.hasGet()) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          action.getGet());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      MutationType type = action.getMutation().getMutateType();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (rm == null) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        rm = new RowMutations(action.getMutation().getRow().toByteArray());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      switch (type) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        case PUT:<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          rm.add(ProtobufUtil.toPut(action.getMutation(), cellScanner));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          break;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        case DELETE:<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          rm.add(ProtobufUtil.toDelete(action.getMutation(), cellScanner));<a name="line.508"></a>
+<span class="sourceLineNo">229</span>  // The reference to the priority extraction function<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private final PriorityFunction priority;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  private final long minimumScanTimeLimitDelta;<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * An Rpc callback for closing a RegionScanner.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    private final RegionScanner scanner;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      this.scanner = scanner;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public void run() throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      this.scanner.close();<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    private final String scannerName;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    private final RegionScanner scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    private final Lease lease;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.scannerName = scannerName;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.scanner = scanner;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.lease = lease;<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      this.scanner.shipped();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (scanners.containsKey(scannerName)) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<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><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * completion of multiGets.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public void addScanner(RegionScanner scanner) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      this.scanners.add(scanner);<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>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (RegionScanner scanner : scanners) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        try {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          scanner.close();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } catch (IOException e) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private static class RegionScannerHolder {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private RegionScanner s;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private Region r;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final RpcCallback closeCallBack;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final RpcCallback shippedCallback;<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        RpcCallback shippedCallback) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.s = s;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.r = r;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.closeCallBack = closeCallBack;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.shippedCallback = shippedCallback;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private long getNextCallSeq() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return nextCallSeq.get();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    private void incNextCallSeq() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      nextCallSeq.incrementAndGet();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private void rollbackNextCallSeq() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      nextCallSeq.decrementAndGet();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * closed<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private class ScannerListener implements LeaseListener {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private final String scannerName;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    ScannerListener(final String n) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      this.scannerName = n;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public void leaseExpired() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (rsh != null) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        RegionScanner s = rsh.s;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          s.close();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        } catch (IOException e) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          LOG.error("Closing scanner for "<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>       

<TRUNCATED>

[26/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 feed20b..abb8a15 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
@@ -31,2767 +31,2812 @@
 <span class="sourceLineNo">023</span>import java.net.BindException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.net.InetSocketAddress;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.net.UnknownHostException;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Iterator;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map.Entry;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.commons.logging.Log;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.logging.LogFactory;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Cell;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HConstants;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ServerName;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.TableName;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Append;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Get;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Put;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.security.User;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.zookeeper.KeeperException;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>import com.google.common.annotations.VisibleForTesting;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import com.google.protobuf.ByteString;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import com.google.protobuf.Message;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import com.google.protobuf.RpcController;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import com.google.protobuf.ServiceException;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@InterfaceAudience.Private<a name="line.194"></a>
-<span class="sourceLineNo">195</span>@SuppressWarnings("deprecation")<a name="line.195"></a>
-<span class="sourceLineNo">196</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ConfigurationObserver {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /** RPC scheduler to use for the region server. */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  final Counter requestCount = new Counter();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  // Server to handle client requests.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  final RpcServerInterface rpcServer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  final InetSocketAddress isa;<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private final HRegionServer regionServer;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private final long maxScannerResultSize;<a name="line.224"></a>
+<span class="sourceLineNo">026</span>import java.nio.ByteBuffer;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.HashMap;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Map.Entry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.NavigableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Set;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.commons.logging.Log;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.commons.logging.LogFactory;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.conf.Configuration;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.Cell;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Append;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Get;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Result;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.security.User;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.zookeeper.KeeperException;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>import com.google.common.annotations.VisibleForTesting;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import com.google.protobuf.ByteString;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import com.google.protobuf.Message;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import com.google.protobuf.RpcController;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import com.google.protobuf.ServiceException;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.195"></a>
+<span class="sourceLineNo">196</span> */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>@InterfaceAudience.Private<a name="line.197"></a>
+<span class="sourceLineNo">198</span>@SuppressWarnings("deprecation")<a name="line.198"></a>
+<span class="sourceLineNo">199</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    ConfigurationObserver {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** RPC scheduler to use for the region server. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  final Counter requestCount = new Counter();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // Server to handle client requests.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  final RpcServerInterface rpcServer;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  final InetSocketAddress isa;<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  // The reference to the priority extraction function<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private final PriorityFunction priority;<a name="line.227"></a>
+<span class="sourceLineNo">226</span>  private final HRegionServer regionServer;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  private final long maxScannerResultSize;<a name="line.227"></a>
 <span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * The RPC timeout period (milliseconds)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private final int rpcTimeout;<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The minimum allowable delta to use for the scan limit<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  private final long minimumScanTimeLimitDelta;<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>   * An Rpc callback for closing a RegionScanner.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    private final RegionScanner scanner;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.scanner = scanner;<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>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void run() throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      this.scanner.close();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    private final String scannerName;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    private final RegionScanner scanner;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final Lease lease;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      this.scannerName = scannerName;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.scanner = scanner;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.lease = lease;<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public void run() throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.scanner.shipped();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (scanners.containsKey(scannerName)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * completion of multiGets.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public void addScanner(RegionScanner scanner) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.scanners.add(scanner);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public void run() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      for (RegionScanner scanner : scanners) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          scanner.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static class RegionScannerHolder {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private RegionScanner s;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    private Region r;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final RpcCallback closeCallBack;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final RpcCallback shippedCallback;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        RpcCallback shippedCallback) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.s = s;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.r = r;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.closeCallBack = closeCallBack;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.shippedCallback = shippedCallback;<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 getNextCallSeq() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      return nextCallSeq.get();<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 void incNextCallSeq() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      nextCallSeq.incrementAndGet();<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 rollbackNextCallSeq() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      nextCallSeq.decrementAndGet();<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * closed<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private class ScannerListener implements LeaseListener {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    private final String scannerName;<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    ScannerListener(final String n) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      this.scannerName = n;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public void leaseExpired() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (rsh != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        RegionScanner s = rsh.s;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        try {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          s.close();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        } catch (IOException e) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          LOG.error("Closing scanner for "<a name="line.373"></a>
-<span class="sourceLineNo">374</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " scanner found, hence no chance to close that related scanner!");<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>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static ResultOrException getResultOrException(<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      final ClientProtos.Result r, final int index, final ClientProtos.RegionLoadStats stats) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return getResultOrException(ResponseConverter.buildActionResult(r, stats), index);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      final ResultOrException.Builder builder, final int index) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return builder.setIndex(index).build();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param mutation Mutation.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param nonceGroup Nonce group from the request.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @returns Nonce used (can be NO_NONCE).<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  private long startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      throws IOException, OperationConflictException {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return HConstants.NO_NONCE;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    boolean canProceed = false;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    try {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    } catch (InterruptedException ex) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    if (!canProceed) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      // TODO: instead, we could convert append/increment to get w/mvcc<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      String message = "The operation with nonce {" + nonceGroup + ", " + mutation.getNonce()<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        + "} on row [" + Bytes.toString(mutation.getRow().toByteArray())<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        + "] may have already completed";<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      throw new OperationConflictException(message);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    return mutation.getNonce();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * Ends nonce operation for a mutation, if needed.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @param mutation Mutation.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      long nonceGroup, boolean success) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<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><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return True if current call supports cellblocks<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private boolean isClientCellBlockSupport() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    RpcCallContext context = RpcServer.getCurrentCall();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final PayloadCarryingRpcController rpcc) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (result == null) return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (isClientCellBlockSupport()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      builder.setResult(pbr);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private void addResults(final ScanResponse.Builder builder, final List&lt;Result&gt; results,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final RpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    builder.setStale(!isDefaultRegion);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (results == null || results.isEmpty()) return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    if (clientCellBlockSupported) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (Result res : results) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        builder.addCellsPerResult(res.size());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        builder.addPartialFlagPerResult(res.isPartial());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      ((PayloadCarryingRpcController)controller).<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        setCellScanner(CellUtil.createCellScanner(results));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    } else {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      for (Result res: results) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        builder.addResults(pbr);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<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>   * Mutate a list of rows atomically.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param region<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param actions<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @throws IOException<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private ClientProtos.RegionLoadStats mutateRows(final Region region,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      final CellScanner cellScanner) throws IOException {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    RowMutations rm = null;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    for (ClientProtos.Action action: actions) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      if (action.hasGet()) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          action.getGet());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      MutationType type = action.getMutation().getMutateType();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (rm == null) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        rm = new RowMutations(action.getMutation().getRow().toByteArray());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      switch (type) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        case PUT:<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          rm.add(ProtobufUtil.toPut(action.getMutation(), cellScanner));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          break;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        case DELETE:<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          rm.add(ProtobufUtil.toDelete(action.getMutation(), cellScanner));<a name="line.508"></a>
+<span class="sourceLineNo">229</span>  // The reference to the priority extraction function<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private final PriorityFunction priority;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  private final long minimumScanTimeLimitDelta;<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * An Rpc callback for closing a RegionScanner.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    private final RegionScanner scanner;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      this.scanner = scanner;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public void run() throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      this.scanner.close();<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    private final String scannerName;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    private final RegionScanner scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    private final Lease lease;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.scannerName = scannerName;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.scanner = scanner;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.lease = lease;<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      this.scanner.shipped();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (scanners.containsKey(scannerName)) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<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><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * completion of multiGets.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public void addScanner(RegionScanner scanner) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      this.scanners.add(scanner);<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>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (RegionScanner scanner : scanners) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        try {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          scanner.close();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } catch (IOException e) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private static class RegionScannerHolder {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private RegionScanner s;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private Region r;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final RpcCallback closeCallBack;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final RpcCallback shippedCallback;<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        RpcCallback shippedCallback) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.s = s;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.r = r;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.closeCallBack = closeCallBack;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.shippedCallback = shippedCallback;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private long getNextCallSeq() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return nextCallSeq.get();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    private void incNextCallSeq() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      nextCallSeq.incrementAndGet();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private void rollbackNextCallSeq() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      nextCallSeq.decrementAndGet();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * closed<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private class ScannerListener implements LeaseListener {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private final String scannerName;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    ScannerListener(final String n) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      this.scannerName = n;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public void leaseExpired() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (rsh != null) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        RegionScanner s = rsh.s;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          s.close();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        } catch (IOException e) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          LOG.error("Closing scanner for "<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.

<TRUNCATED>

[02/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmpl.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmpl.html b/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmpl.html
index b3ca88d..be7b72d 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmpl.html
@@ -23,8 +23,8 @@
 <a class="jxr_linenumber" name="13" href="#13">13</a>  @org.jamon.annotations.Template(
 <a class="jxr_linenumber" name="14" href="#14">14</a>    signature = <span class="jxr_string">"E1689F04F06BAD5E628913C375AEB2C0"</span>,
 <a class="jxr_linenumber" name="15" href="#15">15</a>    optionalArguments = {
-<a class="jxr_linenumber" name="16" href="#16">16</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>),
-<a class="jxr_linenumber" name="17" href="#17">17</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"filter"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="16" href="#16">16</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"filter"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="17" href="#17">17</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>),
 <a class="jxr_linenumber" name="18" href="#18">18</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"taskMonitor"</span>, type = <span class="jxr_string">"TaskMonitor"</span>)})
 <a class="jxr_linenumber" name="19" href="#19">19</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmpl.html">TaskMonitorTmpl</a>
 <a class="jxr_linenumber" name="20" href="#20">20</a>    <strong class="jxr_keyword">extends</strong> org.jamon.AbstractTemplateProxy
@@ -55,40 +55,40 @@
 <a class="jxr_linenumber" name="45" href="#45">45</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmpl.html">ImplData</a>
 <a class="jxr_linenumber" name="46" href="#46">46</a>      <strong class="jxr_keyword">extends</strong> org.jamon.AbstractTemplateProxy.ImplData
 <a class="jxr_linenumber" name="47" href="#47">47</a>    {
-<a class="jxr_linenumber" name="48" href="#48">48</a>      <em class="jxr_comment">// 27, 1</em>
-<a class="jxr_linenumber" name="49" href="#49">49</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
+<a class="jxr_linenumber" name="48" href="#48">48</a>      <em class="jxr_comment">// 26, 1</em>
+<a class="jxr_linenumber" name="49" href="#49">49</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
 <a class="jxr_linenumber" name="50" href="#50">50</a>      {
-<a class="jxr_linenumber" name="51" href="#51">51</a>        <em class="jxr_comment">// 27, 1</em>
-<a class="jxr_linenumber" name="52" href="#52">52</a>        m_format = format;
-<a class="jxr_linenumber" name="53" href="#53">53</a>        m_format__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="51" href="#51">51</a>        <em class="jxr_comment">// 26, 1</em>
+<a class="jxr_linenumber" name="52" href="#52">52</a>        m_filter = filter;
+<a class="jxr_linenumber" name="53" href="#53">53</a>        m_filter__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="54" href="#54">54</a>      }
-<a class="jxr_linenumber" name="55" href="#55">55</a>      <strong class="jxr_keyword">public</strong> String getFormat()
+<a class="jxr_linenumber" name="55" href="#55">55</a>      <strong class="jxr_keyword">public</strong> String getFilter()
 <a class="jxr_linenumber" name="56" href="#56">56</a>      {
-<a class="jxr_linenumber" name="57" href="#57">57</a>        <strong class="jxr_keyword">return</strong> m_format;
+<a class="jxr_linenumber" name="57" href="#57">57</a>        <strong class="jxr_keyword">return</strong> m_filter;
 <a class="jxr_linenumber" name="58" href="#58">58</a>      }
-<a class="jxr_linenumber" name="59" href="#59">59</a>      <strong class="jxr_keyword">private</strong> String m_format;
-<a class="jxr_linenumber" name="60" href="#60">60</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__IsNotDefault()
+<a class="jxr_linenumber" name="59" href="#59">59</a>      <strong class="jxr_keyword">private</strong> String m_filter;
+<a class="jxr_linenumber" name="60" href="#60">60</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFilter__IsNotDefault()
 <a class="jxr_linenumber" name="61" href="#61">61</a>      {
-<a class="jxr_linenumber" name="62" href="#62">62</a>        <strong class="jxr_keyword">return</strong> m_format__IsNotDefault;
+<a class="jxr_linenumber" name="62" href="#62">62</a>        <strong class="jxr_keyword">return</strong> m_filter__IsNotDefault;
 <a class="jxr_linenumber" name="63" href="#63">63</a>      }
-<a class="jxr_linenumber" name="64" href="#64">64</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_format__IsNotDefault;
-<a class="jxr_linenumber" name="65" href="#65">65</a>      <em class="jxr_comment">// 26, 1</em>
-<a class="jxr_linenumber" name="66" href="#66">66</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
+<a class="jxr_linenumber" name="64" href="#64">64</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_filter__IsNotDefault;
+<a class="jxr_linenumber" name="65" href="#65">65</a>      <em class="jxr_comment">// 27, 1</em>
+<a class="jxr_linenumber" name="66" href="#66">66</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
 <a class="jxr_linenumber" name="67" href="#67">67</a>      {
-<a class="jxr_linenumber" name="68" href="#68">68</a>        <em class="jxr_comment">// 26, 1</em>
-<a class="jxr_linenumber" name="69" href="#69">69</a>        m_filter = filter;
-<a class="jxr_linenumber" name="70" href="#70">70</a>        m_filter__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="68" href="#68">68</a>        <em class="jxr_comment">// 27, 1</em>
+<a class="jxr_linenumber" name="69" href="#69">69</a>        m_format = format;
+<a class="jxr_linenumber" name="70" href="#70">70</a>        m_format__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="71" href="#71">71</a>      }
-<a class="jxr_linenumber" name="72" href="#72">72</a>      <strong class="jxr_keyword">public</strong> String getFilter()
+<a class="jxr_linenumber" name="72" href="#72">72</a>      <strong class="jxr_keyword">public</strong> String getFormat()
 <a class="jxr_linenumber" name="73" href="#73">73</a>      {
-<a class="jxr_linenumber" name="74" href="#74">74</a>        <strong class="jxr_keyword">return</strong> m_filter;
+<a class="jxr_linenumber" name="74" href="#74">74</a>        <strong class="jxr_keyword">return</strong> m_format;
 <a class="jxr_linenumber" name="75" href="#75">75</a>      }
-<a class="jxr_linenumber" name="76" href="#76">76</a>      <strong class="jxr_keyword">private</strong> String m_filter;
-<a class="jxr_linenumber" name="77" href="#77">77</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFilter__IsNotDefault()
+<a class="jxr_linenumber" name="76" href="#76">76</a>      <strong class="jxr_keyword">private</strong> String m_format;
+<a class="jxr_linenumber" name="77" href="#77">77</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__IsNotDefault()
 <a class="jxr_linenumber" name="78" href="#78">78</a>      {
-<a class="jxr_linenumber" name="79" href="#79">79</a>        <strong class="jxr_keyword">return</strong> m_filter__IsNotDefault;
+<a class="jxr_linenumber" name="79" href="#79">79</a>        <strong class="jxr_keyword">return</strong> m_format__IsNotDefault;
 <a class="jxr_linenumber" name="80" href="#80">80</a>      }
-<a class="jxr_linenumber" name="81" href="#81">81</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_filter__IsNotDefault;
+<a class="jxr_linenumber" name="81" href="#81">81</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_format__IsNotDefault;
 <a class="jxr_linenumber" name="82" href="#82">82</a>      <em class="jxr_comment">// 25, 1</em>
 <a class="jxr_linenumber" name="83" href="#83">83</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setTaskMonitor(<a href="../../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html">TaskMonitor</a> taskMonitor)
 <a class="jxr_linenumber" name="84" href="#84">84</a>      {
@@ -117,17 +117,17 @@
 <a class="jxr_linenumber" name="107" href="#107">107</a>     <strong class="jxr_keyword">return</strong> (ImplData) <strong class="jxr_keyword">super</strong>.getImplData();
 <a class="jxr_linenumber" name="108" href="#108">108</a>   }
 <a class="jxr_linenumber" name="109" href="#109">109</a>   
-<a class="jxr_linenumber" name="110" href="#110">110</a>   <strong class="jxr_keyword">protected</strong> String format;
-<a class="jxr_linenumber" name="111" href="#111">111</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl setFormat(String p_format)
+<a class="jxr_linenumber" name="110" href="#110">110</a>   <strong class="jxr_keyword">protected</strong> String filter;
+<a class="jxr_linenumber" name="111" href="#111">111</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl setFilter(String p_filter)
 <a class="jxr_linenumber" name="112" href="#112">112</a>   {
-<a class="jxr_linenumber" name="113" href="#113">113</a>     (getImplData()).setFormat(p_format);
+<a class="jxr_linenumber" name="113" href="#113">113</a>     (getImplData()).setFilter(p_filter);
 <a class="jxr_linenumber" name="114" href="#114">114</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="115" href="#115">115</a>   }
 <a class="jxr_linenumber" name="116" href="#116">116</a>   
-<a class="jxr_linenumber" name="117" href="#117">117</a>   <strong class="jxr_keyword">protected</strong> String filter;
-<a class="jxr_linenumber" name="118" href="#118">118</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl setFilter(String p_filter)
+<a class="jxr_linenumber" name="117" href="#117">117</a>   <strong class="jxr_keyword">protected</strong> String format;
+<a class="jxr_linenumber" name="118" href="#118">118</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl setFormat(String p_format)
 <a class="jxr_linenumber" name="119" href="#119">119</a>   {
-<a class="jxr_linenumber" name="120" href="#120">120</a>     (getImplData()).setFilter(p_filter);
+<a class="jxr_linenumber" name="120" href="#120">120</a>     (getImplData()).setFormat(p_format);
 <a class="jxr_linenumber" name="121" href="#121">121</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="122" href="#122">122</a>   }
 <a class="jxr_linenumber" name="123" href="#123">123</a>   

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmplImpl.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmplImpl.html b/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmplImpl.html
index 1fe1872..b0f1fa5 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmplImpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmplImpl.html
@@ -25,18 +25,18 @@
 <a class="jxr_linenumber" name="15" href="#15">15</a>    <strong class="jxr_keyword">implements</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.Intf
 <a class="jxr_linenumber" name="16" href="#16">16</a>  
 <a class="jxr_linenumber" name="17" href="#17">17</a>  {
-<a class="jxr_linenumber" name="18" href="#18">18</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
-<a class="jxr_linenumber" name="19" href="#19">19</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String filter;
+<a class="jxr_linenumber" name="18" href="#18">18</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String filter;
+<a class="jxr_linenumber" name="19" href="#19">19</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
 <a class="jxr_linenumber" name="20" href="#20">20</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.html">TaskMonitor</a> taskMonitor;
 <a class="jxr_linenumber" name="21" href="#21">21</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.ImplData p_implData)
 <a class="jxr_linenumber" name="22" href="#22">22</a>    {
-<a class="jxr_linenumber" name="23" href="#23">23</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFormat__IsNotDefault())
+<a class="jxr_linenumber" name="23" href="#23">23</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFilter__IsNotDefault())
 <a class="jxr_linenumber" name="24" href="#24">24</a>      {
-<a class="jxr_linenumber" name="25" href="#25">25</a>        p_implData.setFormat(<span class="jxr_string">"html"</span>);
+<a class="jxr_linenumber" name="25" href="#25">25</a>        p_implData.setFilter(<span class="jxr_string">"general"</span>);
 <a class="jxr_linenumber" name="26" href="#26">26</a>      }
-<a class="jxr_linenumber" name="27" href="#27">27</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFilter__IsNotDefault())
+<a class="jxr_linenumber" name="27" href="#27">27</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getFormat__IsNotDefault())
 <a class="jxr_linenumber" name="28" href="#28">28</a>      {
-<a class="jxr_linenumber" name="29" href="#29">29</a>        p_implData.setFilter(<span class="jxr_string">"general"</span>);
+<a class="jxr_linenumber" name="29" href="#29">29</a>        p_implData.setFormat(<span class="jxr_string">"html"</span>);
 <a class="jxr_linenumber" name="30" href="#30">30</a>      }
 <a class="jxr_linenumber" name="31" href="#31">31</a>      <strong class="jxr_keyword">if</strong>(! p_implData.getTaskMonitor__IsNotDefault())
 <a class="jxr_linenumber" name="32" href="#32">32</a>      {
@@ -47,8 +47,8 @@
 <a class="jxr_linenumber" name="37" href="#37">37</a>    <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/tmpl/common/TaskMonitorTmplImpl.html">TaskMonitorTmplImpl</a>(org.jamon.TemplateManager p_templateManager, org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl.ImplData p_implData)
 <a class="jxr_linenumber" name="38" href="#38">38</a>    {
 <a class="jxr_linenumber" name="39" href="#39">39</a>      <strong class="jxr_keyword">super</strong>(p_templateManager, __jamon_setOptionalArguments(p_implData));
-<a class="jxr_linenumber" name="40" href="#40">40</a>      format = p_implData.getFormat();
-<a class="jxr_linenumber" name="41" href="#41">41</a>      filter = p_implData.getFilter();
+<a class="jxr_linenumber" name="40" href="#40">40</a>      filter = p_implData.getFilter();
+<a class="jxr_linenumber" name="41" href="#41">41</a>      format = p_implData.getFormat();
 <a class="jxr_linenumber" name="42" href="#42">42</a>      taskMonitor = p_implData.getTaskMonitor();
 <a class="jxr_linenumber" name="43" href="#43">43</a>    }
 <a class="jxr_linenumber" name="44" href="#44">44</a>    

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index fe94ead..16ea3e0 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -70,13 +70,13 @@
 <a class="jxr_linenumber" name="60" href="#60">60</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"master"</span>, type = <span class="jxr_string">"HMaster"</span>)},
 <a class="jxr_linenumber" name="61" href="#61">61</a>    optionalArguments = {
 <a class="jxr_linenumber" name="62" href="#62">62</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"metaLocation"</span>, type = <span class="jxr_string">"ServerName"</span>),
-<a class="jxr_linenumber" name="63" href="#63">63</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"serverManager"</span>, type = <span class="jxr_string">"ServerManager"</span>),
-<a class="jxr_linenumber" name="64" href="#64">64</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"deadServers"</span>, type = <span class="jxr_string">"Set&lt;ServerName&gt;"</span>),
-<a class="jxr_linenumber" name="65" href="#65">65</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>),
-<a class="jxr_linenumber" name="66" href="#66">66</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"frags"</span>, type = <span class="jxr_string">"Map&lt;String,Integer&gt;"</span>),
-<a class="jxr_linenumber" name="67" href="#67">67</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"assignmentManager"</span>, type = <span class="jxr_string">"AssignmentManager"</span>),
+<a class="jxr_linenumber" name="63" href="#63">63</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"frags"</span>, type = <span class="jxr_string">"Map&lt;String,Integer&gt;"</span>),
+<a class="jxr_linenumber" name="64" href="#64">64</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"assignmentManager"</span>, type = <span class="jxr_string">"AssignmentManager"</span>),
+<a class="jxr_linenumber" name="65" href="#65">65</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"serverManager"</span>, type = <span class="jxr_string">"ServerManager"</span>),
+<a class="jxr_linenumber" name="66" href="#66">66</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="67" href="#67">67</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"servers"</span>, type = <span class="jxr_string">"List&lt;ServerName&gt;"</span>),
 <a class="jxr_linenumber" name="68" href="#68">68</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"catalogJanitorEnabled"</span>, type = <span class="jxr_string">"boolean"</span>),
-<a class="jxr_linenumber" name="69" href="#69">69</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"servers"</span>, type = <span class="jxr_string">"List&lt;ServerName&gt;"</span>),
+<a class="jxr_linenumber" name="69" href="#69">69</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"deadServers"</span>, type = <span class="jxr_string">"Set&lt;ServerName&gt;"</span>),
 <a class="jxr_linenumber" name="70" href="#70">70</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"filter"</span>, type = <span class="jxr_string">"String"</span>)})
 <a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html">MasterStatusTmpl</a>
 <a class="jxr_linenumber" name="72" href="#72">72</a>    <strong class="jxr_keyword">extends</strong> org.jamon.AbstractTemplateProxy
@@ -135,91 +135,91 @@
 <a class="jxr_linenumber" name="125" href="#125">125</a>       <strong class="jxr_keyword">return</strong> m_metaLocation__IsNotDefault;
 <a class="jxr_linenumber" name="126" href="#126">126</a>     }
 <a class="jxr_linenumber" name="127" href="#127">127</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_metaLocation__IsNotDefault;
-<a class="jxr_linenumber" name="128" href="#128">128</a>     <em class="jxr_comment">// 28, 1</em>
-<a class="jxr_linenumber" name="129" href="#129">129</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setServerManager(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> serverManager)
+<a class="jxr_linenumber" name="128" href="#128">128</a>     <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="129" href="#129">129</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFrags(Map&lt;String,Integer&gt; frags)
 <a class="jxr_linenumber" name="130" href="#130">130</a>     {
-<a class="jxr_linenumber" name="131" href="#131">131</a>       <em class="jxr_comment">// 28, 1</em>
-<a class="jxr_linenumber" name="132" href="#132">132</a>       m_serverManager = serverManager;
-<a class="jxr_linenumber" name="133" href="#133">133</a>       m_serverManager__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="131" href="#131">131</a>       <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="132" href="#132">132</a>       m_frags = frags;
+<a class="jxr_linenumber" name="133" href="#133">133</a>       m_frags__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="134" href="#134">134</a>     }
-<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> getServerManager()
+<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">public</strong> Map&lt;String,Integer&gt; getFrags()
 <a class="jxr_linenumber" name="136" href="#136">136</a>     {
-<a class="jxr_linenumber" name="137" href="#137">137</a>       <strong class="jxr_keyword">return</strong> m_serverManager;
+<a class="jxr_linenumber" name="137" href="#137">137</a>       <strong class="jxr_keyword">return</strong> m_frags;
 <a class="jxr_linenumber" name="138" href="#138">138</a>     }
-<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> m_serverManager;
-<a class="jxr_linenumber" name="140" href="#140">140</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getServerManager__IsNotDefault()
+<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">private</strong> Map&lt;String,Integer&gt; m_frags;
+<a class="jxr_linenumber" name="140" href="#140">140</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFrags__IsNotDefault()
 <a class="jxr_linenumber" name="141" href="#141">141</a>     {
-<a class="jxr_linenumber" name="142" href="#142">142</a>       <strong class="jxr_keyword">return</strong> m_serverManager__IsNotDefault;
+<a class="jxr_linenumber" name="142" href="#142">142</a>       <strong class="jxr_keyword">return</strong> m_frags__IsNotDefault;
 <a class="jxr_linenumber" name="143" href="#143">143</a>     }
-<a class="jxr_linenumber" name="144" href="#144">144</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_serverManager__IsNotDefault;
-<a class="jxr_linenumber" name="145" href="#145">145</a>     <em class="jxr_comment">// 24, 1</em>
-<a class="jxr_linenumber" name="146" href="#146">146</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setDeadServers(Set&lt;ServerName&gt; deadServers)
+<a class="jxr_linenumber" name="144" href="#144">144</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_frags__IsNotDefault;
+<a class="jxr_linenumber" name="145" href="#145">145</a>     <em class="jxr_comment">// 29, 1</em>
+<a class="jxr_linenumber" name="146" href="#146">146</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setAssignmentManager(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> assignmentManager)
 <a class="jxr_linenumber" name="147" href="#147">147</a>     {
-<a class="jxr_linenumber" name="148" href="#148">148</a>       <em class="jxr_comment">// 24, 1</em>
-<a class="jxr_linenumber" name="149" href="#149">149</a>       m_deadServers = deadServers;
-<a class="jxr_linenumber" name="150" href="#150">150</a>       m_deadServers__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="148" href="#148">148</a>       <em class="jxr_comment">// 29, 1</em>
+<a class="jxr_linenumber" name="149" href="#149">149</a>       m_assignmentManager = assignmentManager;
+<a class="jxr_linenumber" name="150" href="#150">150</a>       m_assignmentManager__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="151" href="#151">151</a>     }
-<a class="jxr_linenumber" name="152" href="#152">152</a>     <strong class="jxr_keyword">public</strong> Set&lt;ServerName&gt; getDeadServers()
+<a class="jxr_linenumber" name="152" href="#152">152</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> getAssignmentManager()
 <a class="jxr_linenumber" name="153" href="#153">153</a>     {
-<a class="jxr_linenumber" name="154" href="#154">154</a>       <strong class="jxr_keyword">return</strong> m_deadServers;
+<a class="jxr_linenumber" name="154" href="#154">154</a>       <strong class="jxr_keyword">return</strong> m_assignmentManager;
 <a class="jxr_linenumber" name="155" href="#155">155</a>     }
-<a class="jxr_linenumber" name="156" href="#156">156</a>     <strong class="jxr_keyword">private</strong> Set&lt;ServerName&gt; m_deadServers;
-<a class="jxr_linenumber" name="157" href="#157">157</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getDeadServers__IsNotDefault()
+<a class="jxr_linenumber" name="156" href="#156">156</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> m_assignmentManager;
+<a class="jxr_linenumber" name="157" href="#157">157</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getAssignmentManager__IsNotDefault()
 <a class="jxr_linenumber" name="158" href="#158">158</a>     {
-<a class="jxr_linenumber" name="159" href="#159">159</a>       <strong class="jxr_keyword">return</strong> m_deadServers__IsNotDefault;
+<a class="jxr_linenumber" name="159" href="#159">159</a>       <strong class="jxr_keyword">return</strong> m_assignmentManager__IsNotDefault;
 <a class="jxr_linenumber" name="160" href="#160">160</a>     }
-<a class="jxr_linenumber" name="161" href="#161">161</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_deadServers__IsNotDefault;
-<a class="jxr_linenumber" name="162" href="#162">162</a>     <em class="jxr_comment">// 27, 1</em>
-<a class="jxr_linenumber" name="163" href="#163">163</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
+<a class="jxr_linenumber" name="161" href="#161">161</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_assignmentManager__IsNotDefault;
+<a class="jxr_linenumber" name="162" href="#162">162</a>     <em class="jxr_comment">// 28, 1</em>
+<a class="jxr_linenumber" name="163" href="#163">163</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setServerManager(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> serverManager)
 <a class="jxr_linenumber" name="164" href="#164">164</a>     {
-<a class="jxr_linenumber" name="165" href="#165">165</a>       <em class="jxr_comment">// 27, 1</em>
-<a class="jxr_linenumber" name="166" href="#166">166</a>       m_format = format;
-<a class="jxr_linenumber" name="167" href="#167">167</a>       m_format__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="165" href="#165">165</a>       <em class="jxr_comment">// 28, 1</em>
+<a class="jxr_linenumber" name="166" href="#166">166</a>       m_serverManager = serverManager;
+<a class="jxr_linenumber" name="167" href="#167">167</a>       m_serverManager__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="168" href="#168">168</a>     }
-<a class="jxr_linenumber" name="169" href="#169">169</a>     <strong class="jxr_keyword">public</strong> String getFormat()
+<a class="jxr_linenumber" name="169" href="#169">169</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> getServerManager()
 <a class="jxr_linenumber" name="170" href="#170">170</a>     {
-<a class="jxr_linenumber" name="171" href="#171">171</a>       <strong class="jxr_keyword">return</strong> m_format;
+<a class="jxr_linenumber" name="171" href="#171">171</a>       <strong class="jxr_keyword">return</strong> m_serverManager;
 <a class="jxr_linenumber" name="172" href="#172">172</a>     }
-<a class="jxr_linenumber" name="173" href="#173">173</a>     <strong class="jxr_keyword">private</strong> String m_format;
-<a class="jxr_linenumber" name="174" href="#174">174</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__IsNotDefault()
+<a class="jxr_linenumber" name="173" href="#173">173</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> m_serverManager;
+<a class="jxr_linenumber" name="174" href="#174">174</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getServerManager__IsNotDefault()
 <a class="jxr_linenumber" name="175" href="#175">175</a>     {
-<a class="jxr_linenumber" name="176" href="#176">176</a>       <strong class="jxr_keyword">return</strong> m_format__IsNotDefault;
+<a class="jxr_linenumber" name="176" href="#176">176</a>       <strong class="jxr_keyword">return</strong> m_serverManager__IsNotDefault;
 <a class="jxr_linenumber" name="177" href="#177">177</a>     }
-<a class="jxr_linenumber" name="178" href="#178">178</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_format__IsNotDefault;
-<a class="jxr_linenumber" name="179" href="#179">179</a>     <em class="jxr_comment">// 21, 1</em>
-<a class="jxr_linenumber" name="180" href="#180">180</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFrags(Map&lt;String,Integer&gt; frags)
+<a class="jxr_linenumber" name="178" href="#178">178</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_serverManager__IsNotDefault;
+<a class="jxr_linenumber" name="179" href="#179">179</a>     <em class="jxr_comment">// 27, 1</em>
+<a class="jxr_linenumber" name="180" href="#180">180</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
 <a class="jxr_linenumber" name="181" href="#181">181</a>     {
-<a class="jxr_linenumber" name="182" href="#182">182</a>       <em class="jxr_comment">// 21, 1</em>
-<a class="jxr_linenumber" name="183" href="#183">183</a>       m_frags = frags;
-<a class="jxr_linenumber" name="184" href="#184">184</a>       m_frags__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="182" href="#182">182</a>       <em class="jxr_comment">// 27, 1</em>
+<a class="jxr_linenumber" name="183" href="#183">183</a>       m_format = format;
+<a class="jxr_linenumber" name="184" href="#184">184</a>       m_format__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="185" href="#185">185</a>     }
-<a class="jxr_linenumber" name="186" href="#186">186</a>     <strong class="jxr_keyword">public</strong> Map&lt;String,Integer&gt; getFrags()
+<a class="jxr_linenumber" name="186" href="#186">186</a>     <strong class="jxr_keyword">public</strong> String getFormat()
 <a class="jxr_linenumber" name="187" href="#187">187</a>     {
-<a class="jxr_linenumber" name="188" href="#188">188</a>       <strong class="jxr_keyword">return</strong> m_frags;
+<a class="jxr_linenumber" name="188" href="#188">188</a>       <strong class="jxr_keyword">return</strong> m_format;
 <a class="jxr_linenumber" name="189" href="#189">189</a>     }
-<a class="jxr_linenumber" name="190" href="#190">190</a>     <strong class="jxr_keyword">private</strong> Map&lt;String,Integer&gt; m_frags;
-<a class="jxr_linenumber" name="191" href="#191">191</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFrags__IsNotDefault()
+<a class="jxr_linenumber" name="190" href="#190">190</a>     <strong class="jxr_keyword">private</strong> String m_format;
+<a class="jxr_linenumber" name="191" href="#191">191</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__IsNotDefault()
 <a class="jxr_linenumber" name="192" href="#192">192</a>     {
-<a class="jxr_linenumber" name="193" href="#193">193</a>       <strong class="jxr_keyword">return</strong> m_frags__IsNotDefault;
+<a class="jxr_linenumber" name="193" href="#193">193</a>       <strong class="jxr_keyword">return</strong> m_format__IsNotDefault;
 <a class="jxr_linenumber" name="194" href="#194">194</a>     }
-<a class="jxr_linenumber" name="195" href="#195">195</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_frags__IsNotDefault;
-<a class="jxr_linenumber" name="196" href="#196">196</a>     <em class="jxr_comment">// 29, 1</em>
-<a class="jxr_linenumber" name="197" href="#197">197</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setAssignmentManager(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> assignmentManager)
+<a class="jxr_linenumber" name="195" href="#195">195</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_format__IsNotDefault;
+<a class="jxr_linenumber" name="196" href="#196">196</a>     <em class="jxr_comment">// 23, 1</em>
+<a class="jxr_linenumber" name="197" href="#197">197</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setServers(List&lt;ServerName&gt; servers)
 <a class="jxr_linenumber" name="198" href="#198">198</a>     {
-<a class="jxr_linenumber" name="199" href="#199">199</a>       <em class="jxr_comment">// 29, 1</em>
-<a class="jxr_linenumber" name="200" href="#200">200</a>       m_assignmentManager = assignmentManager;
-<a class="jxr_linenumber" name="201" href="#201">201</a>       m_assignmentManager__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="199" href="#199">199</a>       <em class="jxr_comment">// 23, 1</em>
+<a class="jxr_linenumber" name="200" href="#200">200</a>       m_servers = servers;
+<a class="jxr_linenumber" name="201" href="#201">201</a>       m_servers__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="202" href="#202">202</a>     }
-<a class="jxr_linenumber" name="203" href="#203">203</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> getAssignmentManager()
+<a class="jxr_linenumber" name="203" href="#203">203</a>     <strong class="jxr_keyword">public</strong> List&lt;ServerName&gt; getServers()
 <a class="jxr_linenumber" name="204" href="#204">204</a>     {
-<a class="jxr_linenumber" name="205" href="#205">205</a>       <strong class="jxr_keyword">return</strong> m_assignmentManager;
+<a class="jxr_linenumber" name="205" href="#205">205</a>       <strong class="jxr_keyword">return</strong> m_servers;
 <a class="jxr_linenumber" name="206" href="#206">206</a>     }
-<a class="jxr_linenumber" name="207" href="#207">207</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> m_assignmentManager;
-<a class="jxr_linenumber" name="208" href="#208">208</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getAssignmentManager__IsNotDefault()
+<a class="jxr_linenumber" name="207" href="#207">207</a>     <strong class="jxr_keyword">private</strong> List&lt;ServerName&gt; m_servers;
+<a class="jxr_linenumber" name="208" href="#208">208</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getServers__IsNotDefault()
 <a class="jxr_linenumber" name="209" href="#209">209</a>     {
-<a class="jxr_linenumber" name="210" href="#210">210</a>       <strong class="jxr_keyword">return</strong> m_assignmentManager__IsNotDefault;
+<a class="jxr_linenumber" name="210" href="#210">210</a>       <strong class="jxr_keyword">return</strong> m_servers__IsNotDefault;
 <a class="jxr_linenumber" name="211" href="#211">211</a>     }
-<a class="jxr_linenumber" name="212" href="#212">212</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_assignmentManager__IsNotDefault;
+<a class="jxr_linenumber" name="212" href="#212">212</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_servers__IsNotDefault;
 <a class="jxr_linenumber" name="213" href="#213">213</a>     <em class="jxr_comment">// 25, 1</em>
 <a class="jxr_linenumber" name="214" href="#214">214</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setCatalogJanitorEnabled(<strong class="jxr_keyword">boolean</strong> catalogJanitorEnabled)
 <a class="jxr_linenumber" name="215" href="#215">215</a>     {
@@ -237,23 +237,23 @@
 <a class="jxr_linenumber" name="227" href="#227">227</a>       <strong class="jxr_keyword">return</strong> m_catalogJanitorEnabled__IsNotDefault;
 <a class="jxr_linenumber" name="228" href="#228">228</a>     }
 <a class="jxr_linenumber" name="229" href="#229">229</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_catalogJanitorEnabled__IsNotDefault;
-<a class="jxr_linenumber" name="230" href="#230">230</a>     <em class="jxr_comment">// 23, 1</em>
-<a class="jxr_linenumber" name="231" href="#231">231</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setServers(List&lt;ServerName&gt; servers)
+<a class="jxr_linenumber" name="230" href="#230">230</a>     <em class="jxr_comment">// 24, 1</em>
+<a class="jxr_linenumber" name="231" href="#231">231</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setDeadServers(Set&lt;ServerName&gt; deadServers)
 <a class="jxr_linenumber" name="232" href="#232">232</a>     {
-<a class="jxr_linenumber" name="233" href="#233">233</a>       <em class="jxr_comment">// 23, 1</em>
-<a class="jxr_linenumber" name="234" href="#234">234</a>       m_servers = servers;
-<a class="jxr_linenumber" name="235" href="#235">235</a>       m_servers__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="233" href="#233">233</a>       <em class="jxr_comment">// 24, 1</em>
+<a class="jxr_linenumber" name="234" href="#234">234</a>       m_deadServers = deadServers;
+<a class="jxr_linenumber" name="235" href="#235">235</a>       m_deadServers__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="236" href="#236">236</a>     }
-<a class="jxr_linenumber" name="237" href="#237">237</a>     <strong class="jxr_keyword">public</strong> List&lt;ServerName&gt; getServers()
+<a class="jxr_linenumber" name="237" href="#237">237</a>     <strong class="jxr_keyword">public</strong> Set&lt;ServerName&gt; getDeadServers()
 <a class="jxr_linenumber" name="238" href="#238">238</a>     {
-<a class="jxr_linenumber" name="239" href="#239">239</a>       <strong class="jxr_keyword">return</strong> m_servers;
+<a class="jxr_linenumber" name="239" href="#239">239</a>       <strong class="jxr_keyword">return</strong> m_deadServers;
 <a class="jxr_linenumber" name="240" href="#240">240</a>     }
-<a class="jxr_linenumber" name="241" href="#241">241</a>     <strong class="jxr_keyword">private</strong> List&lt;ServerName&gt; m_servers;
-<a class="jxr_linenumber" name="242" href="#242">242</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getServers__IsNotDefault()
+<a class="jxr_linenumber" name="241" href="#241">241</a>     <strong class="jxr_keyword">private</strong> Set&lt;ServerName&gt; m_deadServers;
+<a class="jxr_linenumber" name="242" href="#242">242</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getDeadServers__IsNotDefault()
 <a class="jxr_linenumber" name="243" href="#243">243</a>     {
-<a class="jxr_linenumber" name="244" href="#244">244</a>       <strong class="jxr_keyword">return</strong> m_servers__IsNotDefault;
+<a class="jxr_linenumber" name="244" href="#244">244</a>       <strong class="jxr_keyword">return</strong> m_deadServers__IsNotDefault;
 <a class="jxr_linenumber" name="245" href="#245">245</a>     }
-<a class="jxr_linenumber" name="246" href="#246">246</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_servers__IsNotDefault;
+<a class="jxr_linenumber" name="246" href="#246">246</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_deadServers__IsNotDefault;
 <a class="jxr_linenumber" name="247" href="#247">247</a>     <em class="jxr_comment">// 26, 1</em>
 <a class="jxr_linenumber" name="248" href="#248">248</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
 <a class="jxr_linenumber" name="249" href="#249">249</a>     {
@@ -289,38 +289,38 @@
 <a class="jxr_linenumber" name="279" href="#279">279</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="280" href="#280">280</a>   }
 <a class="jxr_linenumber" name="281" href="#281">281</a>   
-<a class="jxr_linenumber" name="282" href="#282">282</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> serverManager;
-<a class="jxr_linenumber" name="283" href="#283">283</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> p_serverManager)
+<a class="jxr_linenumber" name="282" href="#282">282</a>   <strong class="jxr_keyword">protected</strong> Map&lt;String,Integer&gt; frags;
+<a class="jxr_linenumber" name="283" href="#283">283</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)
 <a class="jxr_linenumber" name="284" href="#284">284</a>   {
-<a class="jxr_linenumber" name="285" href="#285">285</a>     (getImplData()).setServerManager(p_serverManager);
+<a class="jxr_linenumber" name="285" href="#285">285</a>     (getImplData()).setFrags(p_frags);
 <a class="jxr_linenumber" name="286" href="#286">286</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="287" href="#287">287</a>   }
 <a class="jxr_linenumber" name="288" href="#288">288</a>   
-<a class="jxr_linenumber" name="289" href="#289">289</a>   <strong class="jxr_keyword">protected</strong> Set&lt;ServerName&gt; deadServers;
-<a class="jxr_linenumber" name="290" href="#290">290</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)
+<a class="jxr_linenumber" name="289" href="#289">289</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> assignmentManager;
+<a class="jxr_linenumber" name="290" href="#290">290</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> p_assignmentManager)
 <a class="jxr_linenumber" name="291" href="#291">291</a>   {
-<a class="jxr_linenumber" name="292" href="#292">292</a>     (getImplData()).setDeadServers(p_deadServers);
+<a class="jxr_linenumber" name="292" href="#292">292</a>     (getImplData()).setAssignmentManager(p_assignmentManager);
 <a class="jxr_linenumber" name="293" href="#293">293</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="294" href="#294">294</a>   }
 <a class="jxr_linenumber" name="295" href="#295">295</a>   
-<a class="jxr_linenumber" name="296" href="#296">296</a>   <strong class="jxr_keyword">protected</strong> String format;
-<a class="jxr_linenumber" name="297" href="#297">297</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)
+<a class="jxr_linenumber" name="296" href="#296">296</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> serverManager;
+<a class="jxr_linenumber" name="297" href="#297">297</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> p_serverManager)
 <a class="jxr_linenumber" name="298" href="#298">298</a>   {
-<a class="jxr_linenumber" name="299" href="#299">299</a>     (getImplData()).setFormat(p_format);
+<a class="jxr_linenumber" name="299" href="#299">299</a>     (getImplData()).setServerManager(p_serverManager);
 <a class="jxr_linenumber" name="300" href="#300">300</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="301" href="#301">301</a>   }
 <a class="jxr_linenumber" name="302" href="#302">302</a>   
-<a class="jxr_linenumber" name="303" href="#303">303</a>   <strong class="jxr_keyword">protected</strong> Map&lt;String,Integer&gt; frags;
-<a class="jxr_linenumber" name="304" href="#304">304</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)
+<a class="jxr_linenumber" name="303" href="#303">303</a>   <strong class="jxr_keyword">protected</strong> String format;
+<a class="jxr_linenumber" name="304" href="#304">304</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)
 <a class="jxr_linenumber" name="305" href="#305">305</a>   {
-<a class="jxr_linenumber" name="306" href="#306">306</a>     (getImplData()).setFrags(p_frags);
+<a class="jxr_linenumber" name="306" href="#306">306</a>     (getImplData()).setFormat(p_format);
 <a class="jxr_linenumber" name="307" href="#307">307</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="308" href="#308">308</a>   }
 <a class="jxr_linenumber" name="309" href="#309">309</a>   
-<a class="jxr_linenumber" name="310" href="#310">310</a>   <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> assignmentManager;
-<a class="jxr_linenumber" name="311" href="#311">311</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> p_assignmentManager)
+<a class="jxr_linenumber" name="310" href="#310">310</a>   <strong class="jxr_keyword">protected</strong> List&lt;ServerName&gt; servers;
+<a class="jxr_linenumber" name="311" href="#311">311</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)
 <a class="jxr_linenumber" name="312" href="#312">312</a>   {
-<a class="jxr_linenumber" name="313" href="#313">313</a>     (getImplData()).setAssignmentManager(p_assignmentManager);
+<a class="jxr_linenumber" name="313" href="#313">313</a>     (getImplData()).setServers(p_servers);
 <a class="jxr_linenumber" name="314" href="#314">314</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="315" href="#315">315</a>   }
 <a class="jxr_linenumber" name="316" href="#316">316</a>   
@@ -331,10 +331,10 @@
 <a class="jxr_linenumber" name="321" href="#321">321</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="322" href="#322">322</a>   }
 <a class="jxr_linenumber" name="323" href="#323">323</a>   
-<a class="jxr_linenumber" name="324" href="#324">324</a>   <strong class="jxr_keyword">protected</strong> List&lt;ServerName&gt; servers;
-<a class="jxr_linenumber" name="325" href="#325">325</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)
+<a class="jxr_linenumber" name="324" href="#324">324</a>   <strong class="jxr_keyword">protected</strong> Set&lt;ServerName&gt; deadServers;
+<a class="jxr_linenumber" name="325" href="#325">325</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)
 <a class="jxr_linenumber" name="326" href="#326">326</a>   {
-<a class="jxr_linenumber" name="327" href="#327">327</a>     (getImplData()).setServers(p_servers);
+<a class="jxr_linenumber" name="327" href="#327">327</a>     (getImplData()).setDeadServers(p_deadServers);
 <a class="jxr_linenumber" name="328" href="#328">328</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="329" href="#329">329</a>   }
 <a class="jxr_linenumber" name="330" href="#330">330</a>   

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index a2f694b..89c67e9 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -71,13 +71,13 @@
 <a class="jxr_linenumber" name="61" href="#61">61</a>  {
 <a class="jxr_linenumber" name="62" href="#62">62</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html">HMaster</a> master;
 <a class="jxr_linenumber" name="63" href="#63">63</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html">ServerName</a> metaLocation;
-<a class="jxr_linenumber" name="64" href="#64">64</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> serverManager;
-<a class="jxr_linenumber" name="65" href="#65">65</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Set&lt;ServerName&gt; deadServers;
-<a class="jxr_linenumber" name="66" href="#66">66</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
-<a class="jxr_linenumber" name="67" href="#67">67</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;String,Integer&gt; frags;
-<a class="jxr_linenumber" name="68" href="#68">68</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> assignmentManager;
+<a class="jxr_linenumber" name="64" href="#64">64</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;String,Integer&gt; frags;
+<a class="jxr_linenumber" name="65" href="#65">65</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html">AssignmentManager</a> assignmentManager;
+<a class="jxr_linenumber" name="66" href="#66">66</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html">ServerManager</a> serverManager;
+<a class="jxr_linenumber" name="67" href="#67">67</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String format;
+<a class="jxr_linenumber" name="68" href="#68">68</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;ServerName&gt; servers;
 <a class="jxr_linenumber" name="69" href="#69">69</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> catalogJanitorEnabled;
-<a class="jxr_linenumber" name="70" href="#70">70</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;ServerName&gt; servers;
+<a class="jxr_linenumber" name="70" href="#70">70</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Set&lt;ServerName&gt; deadServers;
 <a class="jxr_linenumber" name="71" href="#71">71</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String filter;
 <a class="jxr_linenumber" name="72" href="#72">72</a>    <em class="jxr_comment">// 68, 1</em>
 <a class="jxr_linenumber" name="73" href="#73">73</a>    
@@ -112,33 +112,33 @@
 <a class="jxr_linenumber" name="102" href="#102">102</a>     {
 <a class="jxr_linenumber" name="103" href="#103">103</a>       p_implData.setMetaLocation(<strong class="jxr_keyword">null</strong>);
 <a class="jxr_linenumber" name="104" href="#104">104</a>     }
-<a class="jxr_linenumber" name="105" href="#105">105</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getServerManager__IsNotDefault())
+<a class="jxr_linenumber" name="105" href="#105">105</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFrags__IsNotDefault())
 <a class="jxr_linenumber" name="106" href="#106">106</a>     {
-<a class="jxr_linenumber" name="107" href="#107">107</a>       p_implData.setServerManager(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="107" href="#107">107</a>       p_implData.setFrags(<strong class="jxr_keyword">null</strong>);
 <a class="jxr_linenumber" name="108" href="#108">108</a>     }
-<a class="jxr_linenumber" name="109" href="#109">109</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getDeadServers__IsNotDefault())
+<a class="jxr_linenumber" name="109" href="#109">109</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getAssignmentManager__IsNotDefault())
 <a class="jxr_linenumber" name="110" href="#110">110</a>     {
-<a class="jxr_linenumber" name="111" href="#111">111</a>       p_implData.setDeadServers(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="111" href="#111">111</a>       p_implData.setAssignmentManager(<strong class="jxr_keyword">null</strong>);
 <a class="jxr_linenumber" name="112" href="#112">112</a>     }
-<a class="jxr_linenumber" name="113" href="#113">113</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFormat__IsNotDefault())
+<a class="jxr_linenumber" name="113" href="#113">113</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getServerManager__IsNotDefault())
 <a class="jxr_linenumber" name="114" href="#114">114</a>     {
-<a class="jxr_linenumber" name="115" href="#115">115</a>       p_implData.setFormat(<span class="jxr_string">"html"</span>);
+<a class="jxr_linenumber" name="115" href="#115">115</a>       p_implData.setServerManager(<strong class="jxr_keyword">null</strong>);
 <a class="jxr_linenumber" name="116" href="#116">116</a>     }
-<a class="jxr_linenumber" name="117" href="#117">117</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFrags__IsNotDefault())
+<a class="jxr_linenumber" name="117" href="#117">117</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFormat__IsNotDefault())
 <a class="jxr_linenumber" name="118" href="#118">118</a>     {
-<a class="jxr_linenumber" name="119" href="#119">119</a>       p_implData.setFrags(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="119" href="#119">119</a>       p_implData.setFormat(<span class="jxr_string">"html"</span>);
 <a class="jxr_linenumber" name="120" href="#120">120</a>     }
-<a class="jxr_linenumber" name="121" href="#121">121</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getAssignmentManager__IsNotDefault())
+<a class="jxr_linenumber" name="121" href="#121">121</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getServers__IsNotDefault())
 <a class="jxr_linenumber" name="122" href="#122">122</a>     {
-<a class="jxr_linenumber" name="123" href="#123">123</a>       p_implData.setAssignmentManager(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="123" href="#123">123</a>       p_implData.setServers(<strong class="jxr_keyword">null</strong>);
 <a class="jxr_linenumber" name="124" href="#124">124</a>     }
 <a class="jxr_linenumber" name="125" href="#125">125</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getCatalogJanitorEnabled__IsNotDefault())
 <a class="jxr_linenumber" name="126" href="#126">126</a>     {
 <a class="jxr_linenumber" name="127" href="#127">127</a>       p_implData.setCatalogJanitorEnabled(<strong class="jxr_keyword">true</strong>);
 <a class="jxr_linenumber" name="128" href="#128">128</a>     }
-<a class="jxr_linenumber" name="129" href="#129">129</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getServers__IsNotDefault())
+<a class="jxr_linenumber" name="129" href="#129">129</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getDeadServers__IsNotDefault())
 <a class="jxr_linenumber" name="130" href="#130">130</a>     {
-<a class="jxr_linenumber" name="131" href="#131">131</a>       p_implData.setServers(<strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="131" href="#131">131</a>       p_implData.setDeadServers(<strong class="jxr_keyword">null</strong>);
 <a class="jxr_linenumber" name="132" href="#132">132</a>     }
 <a class="jxr_linenumber" name="133" href="#133">133</a>     <strong class="jxr_keyword">if</strong>(! p_implData.getFilter__IsNotDefault())
 <a class="jxr_linenumber" name="134" href="#134">134</a>     {
@@ -151,13 +151,13 @@
 <a class="jxr_linenumber" name="141" href="#141">141</a>     <strong class="jxr_keyword">super</strong>(p_templateManager, __jamon_setOptionalArguments(p_implData));
 <a class="jxr_linenumber" name="142" href="#142">142</a>     master = p_implData.getMaster();
 <a class="jxr_linenumber" name="143" href="#143">143</a>     metaLocation = p_implData.getMetaLocation();
-<a class="jxr_linenumber" name="144" href="#144">144</a>     serverManager = p_implData.getServerManager();
-<a class="jxr_linenumber" name="145" href="#145">145</a>     deadServers = p_implData.getDeadServers();
-<a class="jxr_linenumber" name="146" href="#146">146</a>     format = p_implData.getFormat();
-<a class="jxr_linenumber" name="147" href="#147">147</a>     frags = p_implData.getFrags();
-<a class="jxr_linenumber" name="148" href="#148">148</a>     assignmentManager = p_implData.getAssignmentManager();
+<a class="jxr_linenumber" name="144" href="#144">144</a>     frags = p_implData.getFrags();
+<a class="jxr_linenumber" name="145" href="#145">145</a>     assignmentManager = p_implData.getAssignmentManager();
+<a class="jxr_linenumber" name="146" href="#146">146</a>     serverManager = p_implData.getServerManager();
+<a class="jxr_linenumber" name="147" href="#147">147</a>     format = p_implData.getFormat();
+<a class="jxr_linenumber" name="148" href="#148">148</a>     servers = p_implData.getServers();
 <a class="jxr_linenumber" name="149" href="#149">149</a>     catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();
-<a class="jxr_linenumber" name="150" href="#150">150</a>     servers = p_implData.getServers();
+<a class="jxr_linenumber" name="150" href="#150">150</a>     deadServers = p_implData.getDeadServers();
 <a class="jxr_linenumber" name="151" href="#151">151</a>     filter = p_implData.getFilter();
 <a class="jxr_linenumber" name="152" href="#152">152</a>   }
 <a class="jxr_linenumber" name="153" href="#153">153</a>   
@@ -172,8 +172,8 @@
 <a class="jxr_linenumber" name="162" href="#162">162</a>       <em class="jxr_comment">// 60, 3</em>
 <a class="jxr_linenumber" name="163" href="#163">163</a>       {
 <a class="jxr_linenumber" name="164" href="#164">164</a>         org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__<strong class="jxr_keyword">var</strong>_6 = <strong class="jxr_keyword">new</strong> org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(<strong class="jxr_keyword">this</strong>.getTemplateManager());
-<a class="jxr_linenumber" name="165" href="#165">165</a>         __jamon__<strong class="jxr_keyword">var</strong>_6.setFormat(<span class="jxr_string">"json"</span> );
-<a class="jxr_linenumber" name="166" href="#166">166</a>         __jamon__<strong class="jxr_keyword">var</strong>_6.setFilter(filter);
+<a class="jxr_linenumber" name="165" href="#165">165</a>         __jamon__<strong class="jxr_keyword">var</strong>_6.setFilter(filter);
+<a class="jxr_linenumber" name="166" href="#166">166</a>         __jamon__<strong class="jxr_keyword">var</strong>_6.setFormat(<span class="jxr_string">"json"</span> );
 <a class="jxr_linenumber" name="167" href="#167">167</a>         __jamon__<strong class="jxr_keyword">var</strong>_6.renderNoFlush(jamonWriter);
 <a class="jxr_linenumber" name="168" href="#168">168</a>       }
 <a class="jxr_linenumber" name="169" href="#169">169</a>       <em class="jxr_comment">// 60, 68</em>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index c46ab89..e6b4531 100644
--- a/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/xref/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -35,10 +35,10 @@
 <a class="jxr_linenumber" name="25" href="#25">25</a>    requiredArguments = {
 <a class="jxr_linenumber" name="26" href="#26">26</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"regionServer"</span>, type = <span class="jxr_string">"HRegionServer"</span>)},
 <a class="jxr_linenumber" name="27" href="#27">27</a>    optionalArguments = {
-<a class="jxr_linenumber" name="28" href="#28">28</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>),
-<a class="jxr_linenumber" name="29" href="#29">29</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"bcv"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="28" href="#28">28</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"bcv"</span>, type = <span class="jxr_string">"String"</span>),
+<a class="jxr_linenumber" name="29" href="#29">29</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"filter"</span>, type = <span class="jxr_string">"String"</span>),
 <a class="jxr_linenumber" name="30" href="#30">30</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"bcn"</span>, type = <span class="jxr_string">"String"</span>),
-<a class="jxr_linenumber" name="31" href="#31">31</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"filter"</span>, type = <span class="jxr_string">"String"</span>)})
+<a class="jxr_linenumber" name="31" href="#31">31</a>      @org.jamon.annotations.Argument(name = <span class="jxr_string">"format"</span>, type = <span class="jxr_string">"String"</span>)})
 <a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html">RSStatusTmpl</a>
 <a class="jxr_linenumber" name="33" href="#33">33</a>    <strong class="jxr_keyword">extends</strong> org.jamon.AbstractTemplateProxy
 <a class="jxr_linenumber" name="34" href="#34">34</a>  {
@@ -79,40 +79,40 @@
 <a class="jxr_linenumber" name="69" href="#69">69</a>        <strong class="jxr_keyword">return</strong> m_regionServer;
 <a class="jxr_linenumber" name="70" href="#70">70</a>      }
 <a class="jxr_linenumber" name="71" href="#71">71</a>      <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html">HRegionServer</a> m_regionServer;
-<a class="jxr_linenumber" name="72" href="#72">72</a>      <em class="jxr_comment">// 22, 1</em>
-<a class="jxr_linenumber" name="73" href="#73">73</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
+<a class="jxr_linenumber" name="72" href="#72">72</a>      <em class="jxr_comment">// 24, 1</em>
+<a class="jxr_linenumber" name="73" href="#73">73</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setBcv(String bcv)
 <a class="jxr_linenumber" name="74" href="#74">74</a>      {
-<a class="jxr_linenumber" name="75" href="#75">75</a>        <em class="jxr_comment">// 22, 1</em>
-<a class="jxr_linenumber" name="76" href="#76">76</a>        m_format = format;
-<a class="jxr_linenumber" name="77" href="#77">77</a>        m_format__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="75" href="#75">75</a>        <em class="jxr_comment">// 24, 1</em>
+<a class="jxr_linenumber" name="76" href="#76">76</a>        m_bcv = bcv;
+<a class="jxr_linenumber" name="77" href="#77">77</a>        m_bcv__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="78" href="#78">78</a>      }
-<a class="jxr_linenumber" name="79" href="#79">79</a>      <strong class="jxr_keyword">public</strong> String getFormat()
+<a class="jxr_linenumber" name="79" href="#79">79</a>      <strong class="jxr_keyword">public</strong> String getBcv()
 <a class="jxr_linenumber" name="80" href="#80">80</a>      {
-<a class="jxr_linenumber" name="81" href="#81">81</a>        <strong class="jxr_keyword">return</strong> m_format;
+<a class="jxr_linenumber" name="81" href="#81">81</a>        <strong class="jxr_keyword">return</strong> m_bcv;
 <a class="jxr_linenumber" name="82" href="#82">82</a>      }
-<a class="jxr_linenumber" name="83" href="#83">83</a>      <strong class="jxr_keyword">private</strong> String m_format;
-<a class="jxr_linenumber" name="84" href="#84">84</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__IsNotDefault()
+<a class="jxr_linenumber" name="83" href="#83">83</a>      <strong class="jxr_keyword">private</strong> String m_bcv;
+<a class="jxr_linenumber" name="84" href="#84">84</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getBcv__IsNotDefault()
 <a class="jxr_linenumber" name="85" href="#85">85</a>      {
-<a class="jxr_linenumber" name="86" href="#86">86</a>        <strong class="jxr_keyword">return</strong> m_format__IsNotDefault;
+<a class="jxr_linenumber" name="86" href="#86">86</a>        <strong class="jxr_keyword">return</strong> m_bcv__IsNotDefault;
 <a class="jxr_linenumber" name="87" href="#87">87</a>      }
-<a class="jxr_linenumber" name="88" href="#88">88</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_format__IsNotDefault;
-<a class="jxr_linenumber" name="89" href="#89">89</a>      <em class="jxr_comment">// 24, 1</em>
-<a class="jxr_linenumber" name="90" href="#90">90</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setBcv(String bcv)
+<a class="jxr_linenumber" name="88" href="#88">88</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_bcv__IsNotDefault;
+<a class="jxr_linenumber" name="89" href="#89">89</a>      <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="90" href="#90">90</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
 <a class="jxr_linenumber" name="91" href="#91">91</a>      {
-<a class="jxr_linenumber" name="92" href="#92">92</a>        <em class="jxr_comment">// 24, 1</em>
-<a class="jxr_linenumber" name="93" href="#93">93</a>        m_bcv = bcv;
-<a class="jxr_linenumber" name="94" href="#94">94</a>        m_bcv__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="92" href="#92">92</a>        <em class="jxr_comment">// 21, 1</em>
+<a class="jxr_linenumber" name="93" href="#93">93</a>        m_filter = filter;
+<a class="jxr_linenumber" name="94" href="#94">94</a>        m_filter__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="95" href="#95">95</a>      }
-<a class="jxr_linenumber" name="96" href="#96">96</a>      <strong class="jxr_keyword">public</strong> String getBcv()
+<a class="jxr_linenumber" name="96" href="#96">96</a>      <strong class="jxr_keyword">public</strong> String getFilter()
 <a class="jxr_linenumber" name="97" href="#97">97</a>      {
-<a class="jxr_linenumber" name="98" href="#98">98</a>        <strong class="jxr_keyword">return</strong> m_bcv;
+<a class="jxr_linenumber" name="98" href="#98">98</a>        <strong class="jxr_keyword">return</strong> m_filter;
 <a class="jxr_linenumber" name="99" href="#99">99</a>      }
-<a class="jxr_linenumber" name="100" href="#100">100</a>     <strong class="jxr_keyword">private</strong> String m_bcv;
-<a class="jxr_linenumber" name="101" href="#101">101</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getBcv__IsNotDefault()
+<a class="jxr_linenumber" name="100" href="#100">100</a>     <strong class="jxr_keyword">private</strong> String m_filter;
+<a class="jxr_linenumber" name="101" href="#101">101</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFilter__IsNotDefault()
 <a class="jxr_linenumber" name="102" href="#102">102</a>     {
-<a class="jxr_linenumber" name="103" href="#103">103</a>       <strong class="jxr_keyword">return</strong> m_bcv__IsNotDefault;
+<a class="jxr_linenumber" name="103" href="#103">103</a>       <strong class="jxr_keyword">return</strong> m_filter__IsNotDefault;
 <a class="jxr_linenumber" name="104" href="#104">104</a>     }
-<a class="jxr_linenumber" name="105" href="#105">105</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_bcv__IsNotDefault;
+<a class="jxr_linenumber" name="105" href="#105">105</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_filter__IsNotDefault;
 <a class="jxr_linenumber" name="106" href="#106">106</a>     <em class="jxr_comment">// 23, 1</em>
 <a class="jxr_linenumber" name="107" href="#107">107</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setBcn(String bcn)
 <a class="jxr_linenumber" name="108" href="#108">108</a>     {
@@ -130,23 +130,23 @@
 <a class="jxr_linenumber" name="120" href="#120">120</a>       <strong class="jxr_keyword">return</strong> m_bcn__IsNotDefault;
 <a class="jxr_linenumber" name="121" href="#121">121</a>     }
 <a class="jxr_linenumber" name="122" href="#122">122</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_bcn__IsNotDefault;
-<a class="jxr_linenumber" name="123" href="#123">123</a>     <em class="jxr_comment">// 21, 1</em>
-<a class="jxr_linenumber" name="124" href="#124">124</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFilter(String filter)
+<a class="jxr_linenumber" name="123" href="#123">123</a>     <em class="jxr_comment">// 22, 1</em>
+<a class="jxr_linenumber" name="124" href="#124">124</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setFormat(String format)
 <a class="jxr_linenumber" name="125" href="#125">125</a>     {
-<a class="jxr_linenumber" name="126" href="#126">126</a>       <em class="jxr_comment">// 21, 1</em>
-<a class="jxr_linenumber" name="127" href="#127">127</a>       m_filter = filter;
-<a class="jxr_linenumber" name="128" href="#128">128</a>       m_filter__IsNotDefault = <strong class="jxr_keyword">true</strong>;
+<a class="jxr_linenumber" name="126" href="#126">126</a>       <em class="jxr_comment">// 22, 1</em>
+<a class="jxr_linenumber" name="127" href="#127">127</a>       m_format = format;
+<a class="jxr_linenumber" name="128" href="#128">128</a>       m_format__IsNotDefault = <strong class="jxr_keyword">true</strong>;
 <a class="jxr_linenumber" name="129" href="#129">129</a>     }
-<a class="jxr_linenumber" name="130" href="#130">130</a>     <strong class="jxr_keyword">public</strong> String getFilter()
+<a class="jxr_linenumber" name="130" href="#130">130</a>     <strong class="jxr_keyword">public</strong> String getFormat()
 <a class="jxr_linenumber" name="131" href="#131">131</a>     {
-<a class="jxr_linenumber" name="132" href="#132">132</a>       <strong class="jxr_keyword">return</strong> m_filter;
+<a class="jxr_linenumber" name="132" href="#132">132</a>       <strong class="jxr_keyword">return</strong> m_format;
 <a class="jxr_linenumber" name="133" href="#133">133</a>     }
-<a class="jxr_linenumber" name="134" href="#134">134</a>     <strong class="jxr_keyword">private</strong> String m_filter;
-<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFilter__IsNotDefault()
+<a class="jxr_linenumber" name="134" href="#134">134</a>     <strong class="jxr_keyword">private</strong> String m_format;
+<a class="jxr_linenumber" name="135" href="#135">135</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> getFormat__IsNotDefault()
 <a class="jxr_linenumber" name="136" href="#136">136</a>     {
-<a class="jxr_linenumber" name="137" href="#137">137</a>       <strong class="jxr_keyword">return</strong> m_filter__IsNotDefault;
+<a class="jxr_linenumber" name="137" href="#137">137</a>       <strong class="jxr_keyword">return</strong> m_format__IsNotDefault;
 <a class="jxr_linenumber" name="138" href="#138">138</a>     }
-<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_filter__IsNotDefault;
+<a class="jxr_linenumber" name="139" href="#139">139</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> m_format__IsNotDefault;
 <a class="jxr_linenumber" name="140" href="#140">140</a>   }
 <a class="jxr_linenumber" name="141" href="#141">141</a>   @Override
 <a class="jxr_linenumber" name="142" href="#142">142</a>   <strong class="jxr_keyword">protected</strong> org.jamon.AbstractTemplateProxy.ImplData makeImplData()
@@ -158,17 +158,17 @@
 <a class="jxr_linenumber" name="148" href="#148">148</a>     <strong class="jxr_keyword">return</strong> (ImplData) <strong class="jxr_keyword">super</strong>.getImplData();
 <a class="jxr_linenumber" name="149" href="#149">149</a>   }
 <a class="jxr_linenumber" name="150" href="#150">150</a>   
-<a class="jxr_linenumber" name="151" href="#151">151</a>   <strong class="jxr_keyword">protected</strong> String format;
-<a class="jxr_linenumber" name="152" href="#152">152</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)
+<a class="jxr_linenumber" name="151" href="#151">151</a>   <strong class="jxr_keyword">protected</strong> String bcv;
+<a class="jxr_linenumber" name="152" href="#152">152</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)
 <a class="jxr_linenumber" name="153" href="#153">153</a>   {
-<a class="jxr_linenumber" name="154" href="#154">154</a>     (getImplData()).setFormat(p_format);
+<a class="jxr_linenumber" name="154" href="#154">154</a>     (getImplData()).setBcv(p_bcv);
 <a class="jxr_linenumber" name="155" href="#155">155</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="156" href="#156">156</a>   }
 <a class="jxr_linenumber" name="157" href="#157">157</a>   
-<a class="jxr_linenumber" name="158" href="#158">158</a>   <strong class="jxr_keyword">protected</strong> String bcv;
-<a class="jxr_linenumber" name="159" href="#159">159</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)
+<a class="jxr_linenumber" name="158" href="#158">158</a>   <strong class="jxr_keyword">protected</strong> String filter;
+<a class="jxr_linenumber" name="159" href="#159">159</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)
 <a class="jxr_linenumber" name="160" href="#160">160</a>   {
-<a class="jxr_linenumber" name="161" href="#161">161</a>     (getImplData()).setBcv(p_bcv);
+<a class="jxr_linenumber" name="161" href="#161">161</a>     (getImplData()).setFilter(p_filter);
 <a class="jxr_linenumber" name="162" href="#162">162</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="163" href="#163">163</a>   }
 <a class="jxr_linenumber" name="164" href="#164">164</a>   
@@ -179,10 +179,10 @@
 <a class="jxr_linenumber" name="169" href="#169">169</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="170" href="#170">170</a>   }
 <a class="jxr_linenumber" name="171" href="#171">171</a>   
-<a class="jxr_linenumber" name="172" href="#172">172</a>   <strong class="jxr_keyword">protected</strong> String filter;
-<a class="jxr_linenumber" name="173" href="#173">173</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)
+<a class="jxr_linenumber" name="172" href="#172">172</a>   <strong class="jxr_keyword">protected</strong> String format;
+<a class="jxr_linenumber" name="173" href="#173">173</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)
 <a class="jxr_linenumber" name="174" href="#174">174</a>   {
-<a class="jxr_linenumber" name="175" href="#175">175</a>     (getImplData()).setFilter(p_filter);
+<a class="jxr_linenumber" name="175" href="#175">175</a>     (getImplData()).setFormat(p_format);
 <a class="jxr_linenumber" name="176" href="#176">176</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>;
 <a class="jxr_linenumber" name="177" href="#177">177</a>   }
 <a class="jxr_linenumber" name="178" href="#178">178</a>   


[44/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 6b355bd..328e3f1 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -331,7 +331,7 @@ For flagrant violations requiring a firm response the PMC may opt to skip early
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index 52d583c..f213e65 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -673,7 +673,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 04fff3f..5e35aa3 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -518,7 +518,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index b40a55d..80287ea 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <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" />
@@ -1592,7 +1592,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index acb59e8..8bc88c7 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -312,7 +312,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 168faef..6861269 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -786,7 +786,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 66be2ab..bf86e70 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -1858,6 +1858,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ShutdownHookManager.ShutdownHookManagerV2.html#addShutdownHook(java.lang.Thread,%20int)">addShutdownHook(Thread, int)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ShutdownHookManager.ShutdownHookManagerV2.html" title="class in org.apache.hadoop.hbase.util">ShutdownHookManager.ShutdownHookManagerV2</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/RSRpcServices.html#addSize(org.apache.hadoop.hbase.ipc.RpcCallContext,%20org.apache.hadoop.hbase.client.Result,%20java.lang.Object)">addSize(RpcCallContext, Result, Object)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></dt>
+<dd>
+<div class="block">Method to account for the size of retained cells and retained data blocks.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/HBaseFsck.html#addSkippedRegion(org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo)">addSkippedRegion(HBaseFsck.HbckInfo)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/MetricsSnapshot.html#addSnapshot(long)">addSnapshot(long)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/MetricsSnapshot.html" title="class in org.apache.hadoop.hbase.master">MetricsSnapshot</a></dt>
@@ -34276,6 +34280,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/CoprocessorClassLoader.html#getResource(java.lang.String)">getResource(String)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/CoprocessorClassLoader.html" title="class in org.apache.hadoop.hbase.util">CoprocessorClassLoader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseBlockSize()">getResponseBlockSize()</a></span> - Method in interface org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html#getResponseBlockSize()">getResponseBlockSize()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseCellSize()">getResponseCellSize()</a></span> - Method in interface org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></dt>
 <dd>
 <div class="block">The size of response cells that have been accumulated so far.</div>
@@ -42987,6 +42995,10 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/rest/MetricsRESTSourceImpl.html#incrementRequests(int)">incrementRequests(int)</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="./org/apache/hadoop/hbase/rest/MetricsRESTSourceImpl.html" title="class in org.apache.hadoop.hbase.rest">MetricsRESTSourceImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseBlockSize(long)">incrementResponseBlockSize(long)</a></span> - Method in interface org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html#incrementResponseBlockSize(long)">incrementResponseBlockSize(long)</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseCellSize(long)">incrementResponseCellSize(long)</a></span> - Method in interface org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></dt>
 <dd>
 <div class="block">Add on the given amount to the retained cell size.</div>
@@ -70759,6 +70771,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html#RESPONSE_SIZE_NAME">RESPONSE_SIZE_NAME</a></span> - Static variable in interface org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/MetricsHBaseServerSource.html" title="interface in org.apache.hadoop.hbase.ipc">MetricsHBaseServerSource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html#responseBlockSize">responseBlockSize</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html#responseCellSize">responseCellSize</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/AsyncCall.html#responseDefaultType">responseDefaultType</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/AsyncCall.html" title="class in org.apache.hadoop.hbase.ipc">AsyncCall</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
index 0e68d71..c86084e 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
@@ -136,19 +136,19 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/lib/package-summary.html">org.apache.hadoop.hbase.http.lib</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/package-summary.html">org.apache.hadoop.hbase.http</a></td>
 <td class="colLast">
 <div class="block">
- This package provides user-selectable (via configuration) classes that add
- functionality to the web UI.</div>
+ Copied from hadoop source code.<br>
+ See https://issues.apache.org/jira/browse/HADOOP-10232 to know why.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/package-summary.html">org.apache.hadoop.hbase.http</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/lib/package-summary.html">org.apache.hadoop.hbase.http.lib</a></td>
 <td class="colLast">
 <div class="block">
- Copied from hadoop source code.<br>
- See https://issues.apache.org/jira/browse/HADOOP-10232 to know why.</div>
+ This package provides user-selectable (via configuration) classes that add
+ functionality to the web UI.</div>
 </td>
 </tr>
 </tbody>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
index 5cae3f1..e390dde 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Result.html
@@ -1672,11 +1672,19 @@ service.</div>
                   <a href="../../../../../../org/apache/hadoop/hbase/ipc/PayloadCarryingRpcController.html" title="class in org.apache.hadoop.hbase.ipc">PayloadCarryingRpcController</a>&nbsp;rpcc)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></td>
+<td class="colLast"><span class="strong">RSRpcServices.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html#addSize(org.apache.hadoop.hbase.ipc.RpcCallContext,%20org.apache.hadoop.hbase.client.Result,%20java.lang.Object)">addSize</a></strong>(<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/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;lastBlock)</code>
+<div class="block">Method to account for the size of retained cells and retained data blocks.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">RegionCoprocessorHost.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#postAppend(org.apache.hadoop.hbase.client.Append,%20org.apache.hadoop.hbase.client.Result)">postAppend</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append,
                     <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="strong">RegionCoprocessorHost.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#postIncrement(org.apache.hadoop.hbase.client.Increment,%20org.apache.hadoop.hbase.client.Result)">postIncrement</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment,
                           <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;result)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
index 2012d68..ae15e05 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
@@ -710,7 +710,7 @@ service.</div>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="strong">LoadIncrementalHFiles.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfofDir,
+<td class="colLast"><span class="strong">LoadIncrementalHFiles.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html#prepareHFileQueue(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.client.Table,%20java.util.Deque,%20boolean)">prepareHFileQueue</a></strong>(org.apache.hadoop.fs.Path&nbsp;hfilesDir,
                                   <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.LoadQueueItem.html" title="class in org.apache.hadoop.hbase.mapreduce">LoadIncrementalHFiles.LoadQueueItem</a>&gt;&nbsp;queue,
                                   boolean&nbsp;validateHFile)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 36663e0..bb7fc4e 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -389,12 +389,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">IsolationLevel</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Consistency</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">IsolationLevel</span></a></li>
 </ul>
 </li>
 </ul>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcCallContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcCallContext.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcCallContext.html
index 520ae64..441c7fe 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcCallContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcCallContext.html
@@ -143,10 +143,18 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html" titl
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseBlockSize()">getResponseBlockSize</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseCellSize()">getResponseCellSize</a></strong>()</code>
 <div class="block">The size of response cells that have been accumulated so far.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseBlockSize(long)">incrementResponseBlockSize</a></strong>(long&nbsp;blockSize)</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseCellSize(long)">incrementResponseCellSize</a></strong>(long&nbsp;cellSize)</code>
@@ -298,7 +306,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html" titl
 <a name="incrementResponseCellSize(long)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>incrementResponseCellSize</h4>
 <pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.92">incrementResponseCellSize</a>(long&nbsp;cellSize)</pre>
@@ -309,6 +317,24 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html" titl
  onerous.</div>
 </li>
 </ul>
+<a name="getResponseBlockSize()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getResponseBlockSize</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.94">getResponseBlockSize</a>()</pre>
+</li>
+</ul>
+<a name="incrementResponseBlockSize(long)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>incrementResponseBlockSize</h4>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcCallContext.html#line.95">incrementResponseBlockSize</a>(long&nbsp;blockSize)</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
index 2d38e98..ed01abb 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2001">RpcServer.BlockingServiceAndInterface</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.2012">RpcServer.BlockingServiceAndInterface</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Datastructure for passing a <code>BlockingService</code> and its associated class of
  protobuf service interface.  For example, a server that fielded what is defined
@@ -200,7 +200,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>service</h4>
-<pre>private final&nbsp;com.google.protobuf.BlockingService <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2002">service</a></pre>
+<pre>private final&nbsp;com.google.protobuf.BlockingService <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2013">service</a></pre>
 </li>
 </ul>
 <a name="serviceInterface">
@@ -209,7 +209,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>serviceInterface</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2003">serviceInterface</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2014">serviceInterface</a></pre>
 </li>
 </ul>
 </li>
@@ -226,7 +226,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer.BlockingServiceAndInterface</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2004">RpcServer.BlockingServiceAndInterface</a>(com.google.protobuf.BlockingService&nbsp;service,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2015">RpcServer.BlockingServiceAndInterface</a>(com.google.protobuf.BlockingService&nbsp;service,
                                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;serviceInterface)</pre>
 </li>
 </ul>
@@ -244,7 +244,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getServiceInterface</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2009">getServiceInterface</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2020">getServiceInterface</a>()</pre>
 </li>
 </ul>
 <a name="getBlockingService()">
@@ -253,7 +253,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getBlockingService</h4>
-<pre>public&nbsp;com.google.protobuf.BlockingService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2012">getBlockingService</a>()</pre>
+<pre>public&nbsp;com.google.protobuf.BlockingService&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.BlockingServiceAndInterface.html#line.2023">getBlockingService</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Call.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
index 2bfc584..a428c21 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
@@ -186,29 +186,33 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#responseCellSize">responseCellSize</a></strong></code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#responseBlockSize">responseBlockSize</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#responseCellSize">responseCellSize</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#retryImmediatelySupported">retryImmediatelySupported</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected com.google.protobuf.BlockingService</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#service">service</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#size">size</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#timestamp">timestamp</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected org.apache.htrace.TraceInfo</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#tinfo">tinfo</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#user">user</a></strong></code>&nbsp;</td>
 </tr>
@@ -313,14 +317,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#getResponseBlockSize()">getResponseBlockSize</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#getResponseCellSize()">getResponseCellSize</a></strong>()</code>
 <div class="block">The size of response cells that have been accumulated so far.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#getSize()">getSize</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#incrementResponseBlockSize(long)">incrementResponseBlockSize</a></strong>(long&nbsp;blockSize)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html#incrementResponseCellSize(long)">incrementResponseCellSize</a></strong>(long&nbsp;cellSize)</code>
@@ -596,13 +608,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.321">responseCellSize</a></pre>
 </li>
 </ul>
+<a name="responseBlockSize">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>responseBlockSize</h4>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.322">responseBlockSize</a></pre>
+</li>
+</ul>
 <a name="retryImmediatelySupported">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>retryImmediatelySupported</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.322">retryImmediatelySupported</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.323">retryImmediatelySupported</a></pre>
 </li>
 </ul>
 </li>
@@ -619,7 +640,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer.Call</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.324">RpcServer.Call</a>(int&nbsp;id,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.325">RpcServer.Call</a>(int&nbsp;id,
               com.google.protobuf.BlockingService&nbsp;service,
               com.google.protobuf.Descriptors.MethodDescriptor&nbsp;md,
               org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader&nbsp;header,
@@ -646,7 +667,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>done</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.350">done</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.351">done</a>()</pre>
 <div class="block">Call is done. Execution happened and we returned results to client. It is now safe to
  cleanup.</div>
 </li>
@@ -657,7 +678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.360">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.361">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -670,7 +691,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeader</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.366">getHeader</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.367">getHeader</a>()</pre>
 </li>
 </ul>
 <a name="toShortString()">
@@ -679,7 +700,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>toShortString</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.374">toShortString</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.375">toShortString</a>()</pre>
 </li>
 </ul>
 <a name="toTraceString()">
@@ -688,7 +709,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>toTraceString</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.383">toTraceString</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.384">toTraceString</a>()</pre>
 </li>
 </ul>
 <a name="setSaslTokenResponse(java.nio.ByteBuffer)">
@@ -697,7 +718,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setSaslTokenResponse</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.390">setSaslTokenResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;response)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.391">setSaslTokenResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;response)</pre>
 </li>
 </ul>
 <a name="setResponse(java.lang.Object, org.apache.hadoop.hbase.CellScanner, java.lang.Throwable, java.lang.String)">
@@ -706,7 +727,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setResponse</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.394">setResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;m,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.395">setResponse</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;m,
                <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;errorMsg)</pre>
@@ -718,7 +739,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>wrapWithSasl</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html" title="class in org.apache.hadoop.hbase.ipc">BufferChain</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.461">wrapWithSasl</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html" title="class in org.apache.hadoop.hbase.ipc">BufferChain</a>&nbsp;bc)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html" title="class in org.apache.hadoop.hbase.ipc">BufferChain</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.462">wrapWithSasl</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferChain.html" title="class in org.apache.hadoop.hbase.ipc">BufferChain</a>&nbsp;bc)
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -730,7 +751,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>endDelay</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.484">endDelay</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;result)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.485">endDelay</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;result)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html#endDelay(java.lang.Object)">Delayable</a></code></strong></div>
 <div class="block">Signal that the  RPC server is now allowed to send the response.</div>
@@ -750,7 +771,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>endDelay</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.496">endDelay</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.497">endDelay</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html#endDelay()">Delayable</a></code></strong></div>
 <div class="block">Signal the end of a delayed RPC, without specifying the return value.  Use
@@ -768,7 +789,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startDelay</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.501">startDelay</a>(boolean&nbsp;delayReturnValue)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.502">startDelay</a>(boolean&nbsp;delayReturnValue)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html#startDelay(boolean)">Delayable</a></code></strong></div>
 <div class="block">Signal that the call response should be delayed, thus freeing the RPC
  server to handle different requests.</div>
@@ -786,7 +807,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>endDelayThrowing</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.512">endDelayThrowing</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.513">endDelayThrowing</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html#endDelayThrowing(java.lang.Throwable)">Delayable</a></code></strong></div>
 <div class="block">End the call, throwing and exception to the caller.  This works regardless
@@ -805,7 +826,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isDelayed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.519">isDelayed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.520">isDelayed</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html#isDelayed()">isDelayed</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html" title="interface in org.apache.hadoop.hbase.ipc">Delayable</a></code></dd>
@@ -818,7 +839,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isReturnValueDelayed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.524">isReturnValueDelayed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.525">isReturnValueDelayed</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html#isReturnValueDelayed()">isReturnValueDelayed</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/Delayable.html" title="interface in org.apache.hadoop.hbase.ipc">Delayable</a></code></dd>
@@ -831,7 +852,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isClientCellBlockSupported</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.529">isClientCellBlockSupported</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.530">isClientCellBlockSupported</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#isClientCellBlockSupported()">RpcCallContext</a></code></strong></div>
 <div class="block">If the client connected and specified a codec to use, then we will use this codec making
  cellblocks to return.  If the client did not specify a codec, we assume it does not support
@@ -850,7 +871,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>disconnectSince</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.534">disconnectSince</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.535">disconnectSince</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#disconnectSince()">RpcCallContext</a></code></strong></div>
 <div class="block">Check if the caller who made this IPC call has disconnected.
  If called from outside the context of IPC, this does nothing.</div>
@@ -867,7 +888,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.542">getSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.543">getSize</a>()</pre>
 </li>
 </ul>
 <a name="getResponseCellSize()">
@@ -876,7 +897,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getResponseCellSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.546">getResponseCellSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.547">getResponseCellSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseCellSize()">RpcCallContext</a></code></strong></div>
 <div class="block">The size of response cells that have been accumulated so far.
  This along with the corresponding increment call is used to ensure that multi's or
@@ -893,7 +914,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementResponseCellSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.550">incrementResponseCellSize</a>(long&nbsp;cellSize)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.551">incrementResponseCellSize</a>(long&nbsp;cellSize)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseCellSize(long)">RpcCallContext</a></code></strong></div>
 <div class="block">Add on the given amount to the retained cell size.
 
@@ -906,13 +927,39 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 </dl>
 </li>
 </ul>
+<a name="getResponseBlockSize()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getResponseBlockSize</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.556">getResponseBlockSize</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getResponseBlockSize()">getResponseBlockSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="incrementResponseBlockSize(long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>incrementResponseBlockSize</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.561">incrementResponseBlockSize</a>(long&nbsp;blockSize)</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#incrementResponseBlockSize(long)">incrementResponseBlockSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="sendResponseIfReady()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>sendResponseIfReady</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.559">sendResponseIfReady</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.570">sendResponseIfReady</a>()
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">If we have a response, and delay is not set, then respond
  immediately.  Otherwise, do not respond to client.  This is
@@ -927,7 +974,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteUser</h4>
-<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.565">getRemoteUser</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.576">getRemoteUser</a>()</pre>
 </li>
 </ul>
 <a name="getRequestUser()">
@@ -936,7 +983,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestUser</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.570">getRequestUser</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.581">getRequestUser</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getRequestUser()">RpcCallContext</a></code></strong></div>
 <div class="block">Returns the user credentials associated with the current RPC request or
  <code>null</code> if no credentials were provided.</div>
@@ -952,7 +999,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestUserName</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.575">getRequestUserName</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.586">getRequestUserName</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getRequestUserName()">getRequestUserName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></code></dd>
@@ -965,7 +1012,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemoteAddress</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.581">getRemoteAddress</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.592">getRemoteAddress</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getRemoteAddress()">getRemoteAddress</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></code></dd>
@@ -978,7 +1025,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getClientVersionInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.VersionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.586">getClientVersionInfo</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.VersionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.597">getClientVersionInfo</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#getClientVersionInfo()">getClientVersionInfo</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></code></dd>
@@ -991,7 +1038,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setCallBack</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.591">setCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a>&nbsp;callback)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.602">setCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a>&nbsp;callback)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#setCallBack(org.apache.hadoop.hbase.ipc.RpcCallback)">RpcCallContext</a></code></strong></div>
 <div class="block">Sets a callback which has to be executed at the end of this RPC call. Such a callback is an
  optional one for any Rpc call.</div>
@@ -1007,7 +1054,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isRetryImmediatelySupported</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.596">isRetryImmediatelySupported</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html#line.607">isRetryImmediatelySupported</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html#isRetryImmediatelySupported()">isRetryImmediatelySupported</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallContext</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
index 8de62e3..7da032c 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html
@@ -118,7 +118,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.1222">RpcServer.CallQueueTooBigException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.1233">RpcServer.CallQueueTooBigException</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../serialized-form.html#org.apache.hadoop.hbase.ipc.RpcServer.CallQueueTooBigException">Serialized Form</a></dd></dl>
 </li>
@@ -184,7 +184,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer.CallQueueTooBigException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html#line.1223">RpcServer.CallQueueTooBigException</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.CallQueueTooBigException.html#line.1234">RpcServer.CallQueueTooBigException</a>()</pre>
 </li>
 </ul>
 </li>


[03/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html b/xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
index 1307d09..e2a085f 100644
--- a/xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
+++ b/xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html
@@ -33,2767 +33,2812 @@
 <a class="jxr_linenumber" name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.net.BindException;
 <a class="jxr_linenumber" name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.net.InetSocketAddress;
 <a class="jxr_linenumber" name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> java.net.UnknownHostException;
-<a class="jxr_linenumber" name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
-<a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
-<a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
-<a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> java.util.Iterator;
-<a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> java.util.List;
-<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
-<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> java.util.Map.Entry;
-<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> java.util.NavigableMap;
-<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
-<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> java.util.TreeSet;
-<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ConcurrentHashMap;
-<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicLong;
-<a class="jxr_linenumber" name="38" href="#38">38</a>  
-<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
-<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
-<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.conf.Configuration;
-<a class="jxr_linenumber" name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Cell;
-<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellScannable;
-<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellScanner;
-<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellUtil;
-<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.DoNotRetryIOException;
-<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.DroppedSnapshotException;
-<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseIOException;
-<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
-<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionInfo;
-<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
-<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MultiActionResultTooLarge;
-<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.NotServingRegionException;
-<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ServerName;
-<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
-<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.UnknownScannerException;
-<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.classification.InterfaceAudience;
-<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Append;
-<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ConnectionUtils;
-<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Delete;
-<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Durability;
-<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Get;
-<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Increment;
-<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Mutation;
-<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Put;
-<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.RegionReplicaUtil;
-<a class="jxr_linenumber" name="67" href="#67">67</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Result;
-<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.RowMutations;
-<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
-<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.conf.ConfigurationObserver;
-<a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;
-<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.MergeRegionException;
-<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.OperationConflictException;
-<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;
-<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.filter.ByteArrayComparable;
-<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
-<a class="jxr_linenumber" name="77" href="#77">77</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;
-<a class="jxr_linenumber" name="78" href="#78">78</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
-<a class="jxr_linenumber" name="79" href="#79">79</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.PriorityFunction;
-<a class="jxr_linenumber" name="80" href="#80">80</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.QosPriority;
-<a class="jxr_linenumber" name="81" href="#81">81</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcCallContext;
-<a class="jxr_linenumber" name="82" href="#82">82</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcCallback;
-<a class="jxr_linenumber" name="83" href="#83">83</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServer;
-<a class="jxr_linenumber" name="84" href="#84">84</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;
-<a class="jxr_linenumber" name="85" href="#85">85</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServerInterface;
-<a class="jxr_linenumber" name="86" href="#86">86</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;
-<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.ServerRpcController;
-<a class="jxr_linenumber" name="88" href="#88">88</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.MasterRpcServices;
-<a class="jxr_linenumber" name="89" href="#89">89</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.ProtobufUtil;
-<a class="jxr_linenumber" name="90" href="#90">90</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.RequestConverter;
-<a class="jxr_linenumber" name="91" href="#91">91</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.ResponseConverter;
-<a class="jxr_linenumber" name="92" href="#92">92</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;
-<a class="jxr_linenumber" name="93" href="#93">93</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
-<a class="jxr_linenumber" name="94" href="#94">94</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;
-<a class="jxr_linenumber" name="95" href="#95">95</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;
-<a class="jxr_linenumber" name="96" href="#96">96</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;
-<a class="jxr_linenumber" name="97" href="#97">97</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;
-<a class="jxr_linenumber" name="98" href="#98">98</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;
-<a class="jxr_linenumber" name="99" href="#99">99</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
-<a class="jxr_linenumber" name="100" href="#100">100</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
-<a class="jxr_linenumber" name="101" href="#101">101</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;
-<a class="jxr_linenumber" name="102" href="#102">102</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;
-<a class="jxr_linenumber" name="103" href="#103">103</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;
-<a class="jxr_linenumber" name="104" href="#104">104</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;
-<a class="jxr_linenumber" name="105" href="#105">105</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;
-<a class="jxr_linenumber" name="106" href="#106">106</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;
-<a class="jxr_linenumber" name="107" href="#107">107</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;
-<a class="jxr_linenumber" name="108" href="#108">108</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;
-<a class="jxr_linenumber" name="109" href="#109">109</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
-<a class="jxr_linenumber" name="110" href="#110">110</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;
-<a class="jxr_linenumber" name="111" href="#111">111</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;
-<a class="jxr_linenumber" name="112" href="#112">112</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;
-<a class="jxr_linenumber" name="113" href="#113">113</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;
-<a class="jxr_linenumber" name="114" href="#114">114</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;
-<a class="jxr_linenumber" name="115" href="#115">115</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
-<a class="jxr_linenumber" name="116" href="#116">116</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;
-<a class="jxr_linenumber" name="117" href="#117">117</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;
-<a class="jxr_linenumber" name="118" href="#118">118</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;
-<a class="jxr_linenumber" name="119" href="#119">119</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
-<a class="jxr_linenumber" name="120" href="#120">120</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;
-<a class="jxr_linenumber" name="121" href="#121">121</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;
-<a class="jxr_linenumber" name="122" href="#122">122</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;
-<a class="jxr_linenumber" name="123" href="#123">123</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;
-<a class="jxr_linenumber" name="124" href="#124">124</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;
-<a class="jxr_linenumber" name="125" href="#125">125</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;
-<a class="jxr_linenumber" name="126" href="#126">126</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;
-<a class="jxr_linenumber" name="127" href="#127">127</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;
-<a class="jxr_linenumber" name="128" href="#128">128</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
-<a class="jxr_linenumber" name="129" href="#129">129</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
-<a class="jxr_linenumber" name="130" href="#130">130</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;
-<a class="jxr_linenumber" name="131" href="#131">131</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;
-<a class="jxr_linenumber" name="132" href="#132">132</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;
-<a class="jxr_linenumber" name="133" href="#133">133</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;
-<a class="jxr_linenumber" name="134" href="#134">134</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;
-<a class="jxr_linenumber" name="135" href="#135">135</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;
-<a class="jxr_linenumber" name="136" href="#136">136</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
-<a class="jxr_linenumber" name="137" href="#137">137</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;
-<a class="jxr_linenumber" name="138" href="#138">138</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;
-<a class="jxr_linenumber" name="139" href="#139">139</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;
-<a class="jxr_linenumber" name="140" href="#140">140</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;
-<a class="jxr_linenumber" name="141" href="#141">141</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;
-<a class="jxr_linenumber" name="142" href="#142">142</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
-<a class="jxr_linenumber" name="143" href="#143">143</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
-<a class="jxr_linenumber" name="144" href="#144">144</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;
-<a class="jxr_linenumber" name="145" href="#145">145</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;
-<a class="jxr_linenumber" name="146" href="#146">146</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;
-<a class="jxr_linenumber" name="147" href="#147">147</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
-<a class="jxr_linenumber" name="148" href="#148">148</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
-<a class="jxr_linenumber" name="149" href="#149">149</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;
-<a class="jxr_linenumber" name="150" href="#150">150</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;
-<a class="jxr_linenumber" name="151" href="#151">151</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
-<a class="jxr_linenumber" name="152" href="#152">152</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
-<a class="jxr_linenumber" name="153" href="#153">153</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;
-<a class="jxr_linenumber" name="154" href="#154">154</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;
-<a class="jxr_linenumber" name="155" href="#155">155</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;
-<a class="jxr_linenumber" name="156" href="#156">156</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;
-<a class="jxr_linenumber" name="157" href="#157">157</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;
-<a class="jxr_linenumber" name="158" href="#158">158</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;
-<a class="jxr_linenumber" name="159" href="#159">159</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.quotas.OperationQuota;
-<a class="jxr_linenumber" name="160" href="#160">160</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;
-<a class="jxr_linenumber" name="161" href="#161">161</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;
-<a class="jxr_linenumber" name="162" href="#162">162</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Leases.Lease;
-<a class="jxr_linenumber" name="163" href="#163">163</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;
-<a class="jxr_linenumber" name="164" href="#164">164</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Region.FlushResult;
-<a class="jxr_linenumber" name="165" href="#165">165</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Region.Operation;
-<a class="jxr_linenumber" name="166" href="#166">166</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;
-<a class="jxr_linenumber" name="167" href="#167">167</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;
-<a class="jxr_linenumber" name="168" href="#168">168</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;
-<a class="jxr_linenumber" name="169" href="#169">169</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.wal.WALEdit;
-<a class="jxr_linenumber" name="170" href="#170">170</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.security.User;
-<a class="jxr_linenumber" name="171" href="#171">171</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Bytes;
-<a class="jxr_linenumber" name="172" href="#172">172</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Counter;
-<a class="jxr_linenumber" name="173" href="#173">173</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.DNS;
-<a class="jxr_linenumber" name="174" href="#174">174</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
-<a class="jxr_linenumber" name="175" href="#175">175</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Pair;
-<a class="jxr_linenumber" name="176" href="#176">176</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;
-<a class="jxr_linenumber" name="177" href="#177">177</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Strings;
-<a class="jxr_linenumber" name="178" href="#178">178</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WAL;
-<a class="jxr_linenumber" name="179" href="#179">179</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALKey;
-<a class="jxr_linenumber" name="180" href="#180">180</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALSplitter;
-<a class="jxr_linenumber" name="181" href="#181">181</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.zookeeper.ZKSplitLog;
-<a class="jxr_linenumber" name="182" href="#182">182</a> <strong class="jxr_keyword">import</strong> org.apache.zookeeper.KeeperException;
-<a class="jxr_linenumber" name="183" href="#183">183</a> 
-<a class="jxr_linenumber" name="184" href="#184">184</a> <strong class="jxr_keyword">import</strong> com.google.common.annotations.VisibleForTesting;
-<a class="jxr_linenumber" name="185" href="#185">185</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.ByteString;
-<a class="jxr_linenumber" name="186" href="#186">186</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.Message;
-<a class="jxr_linenumber" name="187" href="#187">187</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.RpcController;
-<a class="jxr_linenumber" name="188" href="#188">188</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.ServiceException;
-<a class="jxr_linenumber" name="189" href="#189">189</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.TextFormat;
-<a class="jxr_linenumber" name="190" href="#190">190</a> 
-<a class="jxr_linenumber" name="191" href="#191">191</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="192" href="#192">192</a> <em class="jxr_javadoccomment"> * Implements the regionserver RPC services.</em>
-<a class="jxr_linenumber" name="193" href="#193">193</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="194" href="#194">194</a> @InterfaceAudience.Private
-<a class="jxr_linenumber" name="195" href="#195">195</a> @SuppressWarnings(<span class="jxr_string">"deprecation"</span>)
-<a class="jxr_linenumber" name="196" href="#196">196</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RSRpcServices</a> <strong class="jxr_keyword">implements</strong> HBaseRPCErrorHandler,
-<a class="jxr_linenumber" name="197" href="#197">197</a>     AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,
-<a class="jxr_linenumber" name="198" href="#198">198</a>     <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html">ConfigurationObserver</a> {
-<a class="jxr_linenumber" name="199" href="#199">199</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(RSRpcServices.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="200" href="#200">200</a> 
-<a class="jxr_linenumber" name="201" href="#201">201</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> RPC scheduler to use for the region server. */</em>
-<a class="jxr_linenumber" name="202" href="#202">202</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =
-<a class="jxr_linenumber" name="203" href="#203">203</a>     <span class="jxr_string">"hbase.region.server.rpc.scheduler.factory.class"</span>;
-<a class="jxr_linenumber" name="204" href="#204">204</a> 
-<a class="jxr_linenumber" name="205" href="#205">205</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="206" href="#206">206</a> <em class="jxr_javadoccomment">   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This</em>
-<a class="jxr_linenumber" name="207" href="#207">207</a> <em class="jxr_javadoccomment">   * configuration exists to prevent the scenario where a time limit is specified to be so</em>
-<a class="jxr_linenumber" name="208" href="#208">208</a> <em class="jxr_javadoccomment">   * restrictive that the time limit is reached immediately (before any cells are scanned).</em>
-<a class="jxr_linenumber" name="209" href="#209">209</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="210" href="#210">210</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =
-<a class="jxr_linenumber" name="211" href="#211">211</a>       <span class="jxr_string">"hbase.region.server.rpc.minimum.scan.time.limit.delta"</span>;
-<a class="jxr_linenumber" name="212" href="#212">212</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="213" href="#213">213</a> <em class="jxr_javadoccomment">   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}</em>
-<a class="jxr_linenumber" name="214" href="#214">214</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="215" href="#215">215</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;
-<a class="jxr_linenumber" name="216" href="#216">216</a> 
-<a class="jxr_linenumber" name="217" href="#217">217</a>   <em class="jxr_comment">// Request counter. (Includes requests that are not serviced by regions.)</em>
-<a class="jxr_linenumber" name="218" href="#218">218</a>   <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/util/Counter.html">Counter</a> requestCount = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/util/Counter.html">Counter</a>();
-<a class="jxr_linenumber" name="219" href="#219">219</a>   <em class="jxr_comment">// Server to handle client requests.</em>
-<a class="jxr_linenumber" name="220" href="#220">220</a>   <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html">RpcServerInterface</a> rpcServer;
-<a class="jxr_linenumber" name="221" href="#221">221</a>   <strong class="jxr_keyword">final</strong> InetSocketAddress isa;
-<a class="jxr_linenumber" name="222" href="#222">222</a> 
-<a class="jxr_linenumber" name="223" href="#223">223</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html">HRegionServer</a> regionServer;
-<a class="jxr_linenumber" name="224" href="#224">224</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> maxScannerResultSize;
+<a class="jxr_linenumber" name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> java.nio.ByteBuffer;
+<a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
+<a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
+<a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
+<a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> java.util.Iterator;
+<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> java.util.List;
+<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
+<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> java.util.Map.Entry;
+<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> java.util.NavigableMap;
+<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
+<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> java.util.TreeSet;
+<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ConcurrentHashMap;
+<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicLong;
+<a class="jxr_linenumber" name="39" href="#39">39</a>  
+<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
+<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
+<a class="jxr_linenumber" name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.conf.Configuration;
+<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ByteBufferedCell;
+<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Cell;
+<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellScannable;
+<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellScanner;
+<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CellUtil;
+<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.DoNotRetryIOException;
+<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.DroppedSnapshotException;
+<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseIOException;
+<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
+<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionInfo;
+<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
+<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MultiActionResultTooLarge;
+<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.NotServingRegionException;
+<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ServerName;
+<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
+<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.UnknownScannerException;
+<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.classification.InterfaceAudience;
+<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Append;
+<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ConnectionUtils;
+<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Delete;
+<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Durability;
+<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Get;
+<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Increment;
+<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Mutation;
+<a class="jxr_linenumber" name="67" href="#67">67</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Put;
+<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.RegionReplicaUtil;
+<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Result;
+<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.RowMutations;
+<a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
+<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.VersionInfoUtil;
+<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.conf.ConfigurationObserver;
+<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;
+<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.MergeRegionException;
+<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.OperationConflictException;
+<a class="jxr_linenumber" name="77" href="#77">77</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;
+<a class="jxr_linenumber" name="78" href="#78">78</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.filter.ByteArrayComparable;
+<a class="jxr_linenumber" name="79" href="#79">79</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
+<a class="jxr_linenumber" name="80" href="#80">80</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;
+<a class="jxr_linenumber" name="81" href="#81">81</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
+<a class="jxr_linenumber" name="82" href="#82">82</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.PriorityFunction;
+<a class="jxr_linenumber" name="83" href="#83">83</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.QosPriority;
+<a class="jxr_linenumber" name="84" href="#84">84</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcCallContext;
+<a class="jxr_linenumber" name="85" href="#85">85</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcCallback;
+<a class="jxr_linenumber" name="86" href="#86">86</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServer;
+<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;
+<a class="jxr_linenumber" name="88" href="#88">88</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServerInterface;
+<a class="jxr_linenumber" name="89" href="#89">89</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;
+<a class="jxr_linenumber" name="90" href="#90">90</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.ServerRpcController;
+<a class="jxr_linenumber" name="91" href="#91">91</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.MasterRpcServices;
+<a class="jxr_linenumber" name="92" href="#92">92</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+<a class="jxr_linenumber" name="93" href="#93">93</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.RequestConverter;
+<a class="jxr_linenumber" name="94" href="#94">94</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.ResponseConverter;
+<a class="jxr_linenumber" name="95" href="#95">95</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;
+<a class="jxr_linenumber" name="96" href="#96">96</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
+<a class="jxr_linenumber" name="97" href="#97">97</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;
+<a class="jxr_linenumber" name="98" href="#98">98</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;
+<a class="jxr_linenumber" name="99" href="#99">99</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;
+<a class="jxr_linenumber" name="100" href="#100">100</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;
+<a class="jxr_linenumber" name="101" href="#101">101</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;
+<a class="jxr_linenumber" name="102" href="#102">102</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
+<a class="jxr_linenumber" name="103" href="#103">103</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;
+<a class="jxr_linenumber" name="104" href="#104">104</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;
+<a class="jxr_linenumber" name="105" href="#105">105</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;
+<a class="jxr_linenumber" name="106" href="#106">106</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;
+<a class="jxr_linenumber" name="107" href="#107">107</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;
+<a class="jxr_linenumber" name="108" href="#108">108</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;
+<a class="jxr_linenumber" name="109" href="#109">109</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;
+<a class="jxr_linenumber" name="110" href="#110">110</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;
+<a class="jxr_linenumber" name="111" href="#111">111</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;
+<a class="jxr_linenumber" name="112" href="#112">112</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
+<a class="jxr_linenumber" name="113" href="#113">113</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;
+<a class="jxr_linenumber" name="114" href="#114">114</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;
+<a class="jxr_linenumber" name="115" href="#115">115</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;
+<a class="jxr_linenumber" name="116" href="#116">116</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;
+<a class="jxr_linenumber" name="117" href="#117">117</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;
+<a class="jxr_linenumber" name="118" href="#118">118</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
+<a class="jxr_linenumber" name="119" href="#119">119</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;
+<a class="jxr_linenumber" name="120" href="#120">120</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;
+<a class="jxr_linenumber" name="121" href="#121">121</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;
+<a class="jxr_linenumber" name="122" href="#122">122</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
+<a class="jxr_linenumber" name="123" href="#123">123</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;
+<a class="jxr_linenumber" name="124" href="#124">124</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;
+<a class="jxr_linenumber" name="125" href="#125">125</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;
+<a class="jxr_linenumber" name="126" href="#126">126</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;
+<a class="jxr_linenumber" name="127" href="#127">127</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;
+<a class="jxr_linenumber" name="128" href="#128">128</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;
+<a class="jxr_linenumber" name="129" href="#129">129</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;
+<a class="jxr_linenumber" name="130" href="#130">130</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;
+<a class="jxr_linenumber" name="131" href="#131">131</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
+<a class="jxr_linenumber" name="132" href="#132">132</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;
+<a class="jxr_linenumber" name="133" href="#133">133</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;
+<a class="jxr_linenumber" name="134" href="#134">134</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;
+<a class="jxr_linenumber" name="135" href="#135">135</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;
+<a class="jxr_linenumber" name="136" href="#136">136</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;
+<a class="jxr_linenumber" name="137" href="#137">137</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;
+<a class="jxr_linenumber" name="138" href="#138">138</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;
+<a class="jxr_linenumber" name="139" href="#139">139</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;
+<a class="jxr_linenumber" name="140" href="#140">140</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;
+<a class="jxr_linenumber" name="141" href="#141">141</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;
+<a class="jxr_linenumber" name="142" href="#142">142</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;
+<a class="jxr_linenumber" name="143" href="#143">143</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;
+<a class="jxr_linenumber" name="144" href="#144">144</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;
+<a class="jxr_linenumber" name="145" href="#145">145</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
+<a class="jxr_linenumber" name="146" href="#146">146</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
+<a class="jxr_linenumber" name="147" href="#147">147</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;
+<a class="jxr_linenumber" name="148" href="#148">148</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;
+<a class="jxr_linenumber" name="149" href="#149">149</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;
+<a class="jxr_linenumber" name="150" href="#150">150</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
+<a class="jxr_linenumber" name="151" href="#151">151</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
+<a class="jxr_linenumber" name="152" href="#152">152</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;
+<a class="jxr_linenumber" name="153" href="#153">153</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;
+<a class="jxr_linenumber" name="154" href="#154">154</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;
+<a class="jxr_linenumber" name="155" href="#155">155</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;
+<a class="jxr_linenumber" name="156" href="#156">156</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;
+<a class="jxr_linenumber" name="157" href="#157">157</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;
+<a class="jxr_linenumber" name="158" href="#158">158</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;
+<a class="jxr_linenumber" name="159" href="#159">159</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;
+<a class="jxr_linenumber" name="160" href="#160">160</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;
+<a class="jxr_linenumber" name="161" href="#161">161</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;
+<a class="jxr_linenumber" name="162" href="#162">162</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.quotas.OperationQuota;
+<a class="jxr_linenumber" name="163" href="#163">163</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;
+<a class="jxr_linenumber" name="164" href="#164">164</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;
+<a class="jxr_linenumber" name="165" href="#165">165</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Leases.Lease;
+<a class="jxr_linenumber" name="166" href="#166">166</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;
+<a class="jxr_linenumber" name="167" href="#167">167</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Region.FlushResult;
+<a class="jxr_linenumber" name="168" href="#168">168</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Region.Operation;
+<a class="jxr_linenumber" name="169" href="#169">169</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;
+<a class="jxr_linenumber" name="170" href="#170">170</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;
+<a class="jxr_linenumber" name="171" href="#171">171</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;
+<a class="jxr_linenumber" name="172" href="#172">172</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.wal.WALEdit;
+<a class="jxr_linenumber" name="173" href="#173">173</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.security.User;
+<a class="jxr_linenumber" name="174" href="#174">174</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Bytes;
+<a class="jxr_linenumber" name="175" href="#175">175</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Counter;
+<a class="jxr_linenumber" name="176" href="#176">176</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.DNS;
+<a class="jxr_linenumber" name="177" href="#177">177</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
+<a class="jxr_linenumber" name="178" href="#178">178</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Pair;
+<a class="jxr_linenumber" name="179" href="#179">179</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;
+<a class="jxr_linenumber" name="180" href="#180">180</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Strings;
+<a class="jxr_linenumber" name="181" href="#181">181</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WAL;
+<a class="jxr_linenumber" name="182" href="#182">182</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALKey;
+<a class="jxr_linenumber" name="183" href="#183">183</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALSplitter;
+<a class="jxr_linenumber" name="184" href="#184">184</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.zookeeper.ZKSplitLog;
+<a class="jxr_linenumber" name="185" href="#185">185</a> <strong class="jxr_keyword">import</strong> org.apache.zookeeper.KeeperException;
+<a class="jxr_linenumber" name="186" href="#186">186</a> 
+<a class="jxr_linenumber" name="187" href="#187">187</a> <strong class="jxr_keyword">import</strong> com.google.common.annotations.VisibleForTesting;
+<a class="jxr_linenumber" name="188" href="#188">188</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.ByteString;
+<a class="jxr_linenumber" name="189" href="#189">189</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.Message;
+<a class="jxr_linenumber" name="190" href="#190">190</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.RpcController;
+<a class="jxr_linenumber" name="191" href="#191">191</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.ServiceException;
+<a class="jxr_linenumber" name="192" href="#192">192</a> <strong class="jxr_keyword">import</strong> com.google.protobuf.TextFormat;
+<a class="jxr_linenumber" name="193" href="#193">193</a> 
+<a class="jxr_linenumber" name="194" href="#194">194</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="195" href="#195">195</a> <em class="jxr_javadoccomment"> * Implements the regionserver RPC services.</em>
+<a class="jxr_linenumber" name="196" href="#196">196</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="197" href="#197">197</a> @InterfaceAudience.Private
+<a class="jxr_linenumber" name="198" href="#198">198</a> @SuppressWarnings(<span class="jxr_string">"deprecation"</span>)
+<a class="jxr_linenumber" name="199" href="#199">199</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RSRpcServices</a> <strong class="jxr_keyword">implements</strong> HBaseRPCErrorHandler,
+<a class="jxr_linenumber" name="200" href="#200">200</a>     AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,
+<a class="jxr_linenumber" name="201" href="#201">201</a>     <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html">ConfigurationObserver</a> {
+<a class="jxr_linenumber" name="202" href="#202">202</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(RSRpcServices.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="203" href="#203">203</a> 
+<a class="jxr_linenumber" name="204" href="#204">204</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> RPC scheduler to use for the region server. */</em>
+<a class="jxr_linenumber" name="205" href="#205">205</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =
+<a class="jxr_linenumber" name="206" href="#206">206</a>     <span class="jxr_string">"hbase.region.server.rpc.scheduler.factory.class"</span>;
+<a class="jxr_linenumber" name="207" href="#207">207</a> 
+<a class="jxr_linenumber" name="208" href="#208">208</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="209" href="#209">209</a> <em class="jxr_javadoccomment">   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This</em>
+<a class="jxr_linenumber" name="210" href="#210">210</a> <em class="jxr_javadoccomment">   * configuration exists to prevent the scenario where a time limit is specified to be so</em>
+<a class="jxr_linenumber" name="211" href="#211">211</a> <em class="jxr_javadoccomment">   * restrictive that the time limit is reached immediately (before any cells are scanned).</em>
+<a class="jxr_linenumber" name="212" href="#212">212</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="213" href="#213">213</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =
+<a class="jxr_linenumber" name="214" href="#214">214</a>       <span class="jxr_string">"hbase.region.server.rpc.minimum.scan.time.limit.delta"</span>;
+<a class="jxr_linenumber" name="215" href="#215">215</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="216" href="#216">216</a> <em class="jxr_javadoccomment">   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}</em>
+<a class="jxr_linenumber" name="217" href="#217">217</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="218" href="#218">218</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;
+<a class="jxr_linenumber" name="219" href="#219">219</a> 
+<a class="jxr_linenumber" name="220" href="#220">220</a>   <em class="jxr_comment">// Request counter. (Includes requests that are not serviced by regions.)</em>
+<a class="jxr_linenumber" name="221" href="#221">221</a>   <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/util/Counter.html">Counter</a> requestCount = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/util/Counter.html">Counter</a>();
+<a class="jxr_linenumber" name="222" href="#222">222</a>   <em class="jxr_comment">// Server to handle client requests.</em>
+<a class="jxr_linenumber" name="223" href="#223">223</a>   <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html">RpcServerInterface</a> rpcServer;
+<a class="jxr_linenumber" name="224" href="#224">224</a>   <strong class="jxr_keyword">final</strong> InetSocketAddress isa;
 <a class="jxr_linenumber" name="225" href="#225">225</a> 
-<a class="jxr_linenumber" name="226" href="#226">226</a>   <em class="jxr_comment">// The reference to the priority extraction function</em>
-<a class="jxr_linenumber" name="227" href="#227">227</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/PriorityFunction.html">PriorityFunction</a> priority;
+<a class="jxr_linenumber" name="226" href="#226">226</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html">HRegionServer</a> regionServer;
+<a class="jxr_linenumber" name="227" href="#227">227</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> maxScannerResultSize;
 <a class="jxr_linenumber" name="228" href="#228">228</a> 
-<a class="jxr_linenumber" name="229" href="#229">229</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> AtomicLong scannerIdGen = <strong class="jxr_keyword">new</strong> AtomicLong(0L);
-<a class="jxr_linenumber" name="230" href="#230">230</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =
-<a class="jxr_linenumber" name="231" href="#231">231</a>     <strong class="jxr_keyword">new</strong> ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();
-<a class="jxr_linenumber" name="232" href="#232">232</a> 
-<a class="jxr_linenumber" name="233" href="#233">233</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="234" href="#234">234</a> <em class="jxr_javadoccomment">   * The lease timeout period for client scanners (milliseconds).</em>
-<a class="jxr_linenumber" name="235" href="#235">235</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="236" href="#236">236</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> scannerLeaseTimeoutPeriod;
-<a class="jxr_linenumber" name="237" href="#237">237</a> 
-<a class="jxr_linenumber" name="238" href="#238">238</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="239" href="#239">239</a> <em class="jxr_javadoccomment">   * The RPC timeout period (milliseconds)</em>
-<a class="jxr_linenumber" name="240" href="#240">240</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="241" href="#241">241</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rpcTimeout;
-<a class="jxr_linenumber" name="242" href="#242">242</a> 
-<a class="jxr_linenumber" name="243" href="#243">243</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="244" href="#244">244</a> <em class="jxr_javadoccomment">   * The minimum allowable delta to use for the scan limit</em>
-<a class="jxr_linenumber" name="245" href="#245">245</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="246" href="#246">246</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> minimumScanTimeLimitDelta;
-<a class="jxr_linenumber" name="247" href="#247">247</a> 
-<a class="jxr_linenumber" name="248" href="#248">248</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="249" href="#249">249</a> <em class="jxr_javadoccomment">   * An Rpc callback for closing a RegionScanner.</em>
-<a class="jxr_linenumber" name="250" href="#250">250</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="251" href="#251">251</a>    <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannerCloseCallBack</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> {
-<a class="jxr_linenumber" name="252" href="#252">252</a> 
-<a class="jxr_linenumber" name="253" href="#253">253</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> scanner;
-<a class="jxr_linenumber" name="254" href="#254">254</a> 
-<a class="jxr_linenumber" name="255" href="#255">255</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannerCloseCallBack</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> scanner){
-<a class="jxr_linenumber" name="256" href="#256">256</a>       <strong class="jxr_keyword">this</strong>.scanner = scanner;
-<a class="jxr_linenumber" name="257" href="#257">257</a>     }
-<a class="jxr_linenumber" name="258" href="#258">258</a> 
-<a class="jxr_linenumber" name="259" href="#259">259</a>     @Override
-<a class="jxr_linenumber" name="260" href="#260">260</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="261" href="#261">261</a>       <strong class="jxr_keyword">this</strong>.scanner.close();
-<a class="jxr_linenumber" name="262" href="#262">262</a>     }
-<a class="jxr_linenumber" name="263" href="#263">263</a>   }
-<a class="jxr_linenumber" name="264" href="#264">264</a> 
-<a class="jxr_linenumber" name="265" href="#265">265</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="266" href="#266">266</a> <em class="jxr_javadoccomment">   * An Rpc callback for doing shipped() call on a RegionScanner.</em>
-<a class="jxr_linenumber" name="267" href="#267">267</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="268" href="#268">268</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannerShippedCallBack</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> {
-<a class="jxr_linenumber" name="269" href="#269">269</a> 
-<a class="jxr_linenumber" name="270" href="#270">270</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String scannerName;
-<a class="jxr_linenumber" name="271" href="#271">271</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> scanner;
-<a class="jxr_linenumber" name="272" href="#272">272</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.html">Lease</a> lease;
-<a class="jxr_linenumber" name="273" href="#273">273</a> 
-<a class="jxr_linenumber" name="274" href="#274">274</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannerShippedCallBack</a>(String scannerName, <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> scanner, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Leases.html">Lease</a> lease) {
-<a class="jxr_linenumber" name="275" href="#275">275</a>       <strong class="jxr_keyword">this</strong>.scannerName = scannerName;
-<a class="jxr_linenumber" name="276" href="#276">276</a>       <strong class="jxr_keyword">this</strong>.scanner = scanner;
-<a class="jxr_linenumber" name="277" href="#277">277</a>       <strong class="jxr_keyword">this</strong>.lease = lease;
-<a class="jxr_linenumber" name="278" href="#278">278</a>     }
-<a class="jxr_linenumber" name="279" href="#279">279</a> 
-<a class="jxr_linenumber" name="280" href="#280">280</a>     @Override
-<a class="jxr_linenumber" name="281" href="#281">281</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="282" href="#282">282</a>       <strong class="jxr_keyword">this</strong>.scanner.shipped();
-<a class="jxr_linenumber" name="283" href="#283">283</a>       <em class="jxr_comment">// We're done. On way out re-add the above removed lease. The lease was temp removed for this</em>
-<a class="jxr_linenumber" name="284" href="#284">284</a>       <em class="jxr_comment">// Rpc call and we are at end of the call now. Time to add it back.</em>
-<a class="jxr_linenumber" name="285" href="#285">285</a>       <strong class="jxr_keyword">if</strong> (scanners.containsKey(scannerName)) {
-<a class="jxr_linenumber" name="286" href="#286">286</a>         <strong class="jxr_keyword">if</strong> (lease != <strong class="jxr_keyword">null</strong>) regionServer.leases.addLease(lease);
-<a class="jxr_linenumber" name="287" href="#287">287</a>       }
-<a class="jxr_linenumber" name="288" href="#288">288</a>     }
-<a class="jxr_linenumber" name="289" href="#289">289</a>   }
-<a class="jxr_linenumber" name="290" href="#290">290</a> 
-<a class="jxr_linenumber" name="291" href="#291">291</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="292" href="#292">292</a> <em class="jxr_javadoccomment">   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on</em>
-<a class="jxr_linenumber" name="293" href="#293">293</a> <em class="jxr_javadoccomment">   * completion of multiGets.</em>
-<a class="jxr_linenumber" name="294" href="#294">294</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="295" href="#295">295</a>    <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannersCloseCallBack</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> {
-<a class="jxr_linenumber" name="296" href="#296">296</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;RegionScanner&gt; scanners = <strong class="jxr_keyword">new</strong> ArrayList&lt;RegionScanner&gt;();
-<a class="jxr_linenumber" name="297" href="#297">297</a> 
-<a class="jxr_linenumber" name="298" href="#298">298</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> addScanner(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> scanner) {
-<a class="jxr_linenumber" name="299" href="#299">299</a>       <strong class="jxr_keyword">this</strong>.scanners.add(scanner);
-<a class="jxr_linenumber" name="300" href="#300">300</a>     }
-<a class="jxr_linenumber" name="301" href="#301">301</a> 
-<a class="jxr_linenumber" name="302" href="#302">302</a>     @Override
-<a class="jxr_linenumber" name="303" href="#303">303</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
-<a class="jxr_linenumber" name="304" href="#304">304</a>       <strong class="jxr_keyword">for</strong> (RegionScanner scanner : scanners) {
-<a class="jxr_linenumber" name="305" href="#305">305</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="306" href="#306">306</a>           scanner.close();
-<a class="jxr_linenumber" name="307" href="#307">307</a>         } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="308" href="#308">308</a>           LOG.error(<span class="jxr_string">"Exception while closing the scanner "</span> + scanner, e);
-<a class="jxr_linenumber" name="309" href="#309">309</a>         }
-<a class="jxr_linenumber" name="310" href="#310">310</a>       }
-<a class="jxr_linenumber" name="311" href="#311">311</a>     }
-<a class="jxr_linenumber" name="312" href="#312">312</a>   }
-<a class="jxr_linenumber" name="313" href="#313">313</a> 
-<a class="jxr_linenumber" name="314" href="#314">314</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="315" href="#315">315</a> <em class="jxr_javadoccomment">   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.</em>
-<a class="jxr_linenumber" name="316" href="#316">316</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="317" href="#317">317</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannerHolder</a> {
-<a class="jxr_linenumber" name="318" href="#318">318</a>     <strong class="jxr_keyword">private</strong> AtomicLong nextCallSeq = <strong class="jxr_keyword">new</strong> AtomicLong(0);
-<a class="jxr_linenumber" name="319" href="#319">319</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> s;
-<a class="jxr_linenumber" name="320" href="#320">320</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html">Region</a> r;
-<a class="jxr_linenumber" name="321" href="#321">321</a>     <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> closeCallBack;
-<a class="jxr_linenumber" name="322" href="#322">322</a>     <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> shippedCallback;
-<a class="jxr_linenumber" name="323" href="#323">323</a> 
-<a class="jxr_linenumber" name="324" href="#324">324</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannerHolder</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> s, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html">Region</a> r, <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> closeCallBack,
-<a class="jxr_linenumber" name="325" href="#325">325</a>         <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html">RpcCallback</a> shippedCallback) {
-<a class="jxr_linenumber" name="326" href="#326">326</a>       <strong class="jxr_keyword">this</strong>.s = s;
-<a class="jxr_linenumber" name="327" href="#327">327</a>       <strong class="jxr_keyword">this</strong>.r = r;
-<a class="jxr_linenumber" name="328" href="#328">328</a>       <strong class="jxr_keyword">this</strong>.closeCallBack = closeCallBack;
-<a class="jxr_linenumber" name="329" href="#329">329</a>       <strong class="jxr_keyword">this</strong>.shippedCallback = shippedCallback;
-<a class="jxr_linenumber" name="330" href="#330">330</a>     }
-<a class="jxr_linenumber" name="331" href="#331">331</a> 
-<a class="jxr_linenumber" name="332" href="#332">332</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> getNextCallSeq() {
-<a class="jxr_linenumber" name="333" href="#333">333</a>       <strong class="jxr_keyword">return</strong> nextCallSeq.get();
-<a class="jxr_linenumber" name="334" href="#334">334</a>     }
-<a class="jxr_linenumber" name="335" href="#335">335</a> 
-<a class="jxr_linenumber" name="336" href="#336">336</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> incNextCallSeq() {
-<a class="jxr_linenumber" name="337" href="#337">337</a>       nextCallSeq.incrementAndGet();
-<a class="jxr_linenumber" name="338" href="#338">338</a>     }
-<a class="jxr_linenumber" name="339" href="#339">339</a> 
-<a class="jxr_linenumber" name="340" href="#340">340</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> rollbackNextCallSeq() {
-<a class="jxr_linenumber" name="341" href="#341">341</a>       nextCallSeq.decrementAndGet();
-<a class="jxr_linenumber" name="342" href="#342">342</a>     }
-<a class="jxr_linenumber" name="343" href="#343">343</a>   }
-<a class="jxr_linenumber" name="344" href="#344">344</a> 
-<a class="jxr_linenumber" name="345" href="#345">345</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="346" href="#346">346</a> <em class="jxr_javadoccomment">   * Instantiated as a scanner lease. If the lease times out, the scanner is</em>
-<a class="jxr_linenumber" name="347" href="#347">347</a> <em class="jxr_javadoccomment">   * closed</em>
-<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="349" href="#349">349</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">ScannerListener</a> <strong class="jxr_keyword">implements</strong> <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseListener.html">LeaseListener</a> {
-<a class="jxr_linenumber" name="350" href="#350">350</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String scannerName;
-<a class="jxr_linenumber" name="351" href="#351">351</a> 
-<a class="jxr_linenumber" name="352" href="#352">352</a>     <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">ScannerListener</a>(<strong class="jxr_keyword">final</strong> String n) {
-<a class="jxr_linenumber" name="353" href="#353">353</a>       <strong class="jxr_keyword">this</strong>.scannerName = n;
-<a class="jxr_linenumber" name="354" href="#354">354</a>     }
-<a class="jxr_linenumber" name="355" href="#355">355</a> 
-<a class="jxr_linenumber" name="356" href="#356">356</a>     @Override
-<a class="jxr_linenumber" name="357" href="#357">357</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> leaseExpired() {
-<a class="jxr_linenumber" name="358" href="#358">358</a>       <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html">RegionScannerHolder</a> rsh = scanners.remove(<strong class="jxr_keyword">this</strong>.scannerName);
-<a class="jxr_linenumber" name="359" href="#359">359</a>       <strong class="jxr_keyword">if</strong> (rsh != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="360" href="#360">360</a>         <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html">RegionScanner</a> s = rsh.s;
-<a class="jxr_linenumber" name="361" href="#361">361</a>         LOG.info(<span class="jxr_string">"Scanner "</span> + <strong class="jxr_keyword">this</strong>.scannerName + <span class="jxr_string">" lease expired on region "</span>
-<a class="jxr_linenumber" name="362" href="#362">362</a>           + s.getRegionInfo().getRegionNameAsString());
-<a class="jxr_linenumber" name="363" href="#363">363</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="364" href="#364">364</a>           <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html">Region</a> region = regionServer.getRegion(s.getRegionInfo().getRegionName());
-<a class="jxr_linenumber" name="365" href="#365">365</a>           <strong class="jxr_keyword">if</strong> (region != <strong class="jxr_keyword">null</strong> &amp;&amp; region.getCoprocessorHost() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="366" href="#366">366</a>             region.getCoprocessorHost().preScannerClose(s);
-<a class="jxr_linenumber" name="367" href="#367">367</a>           }
-<a class="jxr_linenumber" name="368" href="#368">368</a>           s.close();
-<a class="jxr_linenumber" name="369" href="#369">369</a>           <strong class="jxr_keyword">if</strong> (region != <strong class="jxr_keyword">null</strong> &amp;&amp; region.getCoprocessorHost() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="370" href="#370">370</a>             region.getCoprocessorHost().postScannerClose(s);
-<a class="jxr_linenumber" name="371" href="#371">371</a>           }
-<a class="jxr_linenumber" name="372" href="#372">372</a>         } <strong class="jxr_keyword">catch</strong> (IOException e) {
-<a class="jxr_linenumber" name="373" href="#373">373</a>           LOG.error(<span class="jxr_string">"Closing scanner for "</span>
-<a class="jxr_linenumber" name="374" href="#374">374</a>             + s.getRegionInfo().getRegionNameAsString(), e);
-<a class="jxr_linenumber" name="375" href="#375">375</a>         }
-<a class="jxr_linenumber" name="376" href="#376">376</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="377" href="#377">377</a>         LOG.warn(<span class="jxr_string">"Scanner "</span> + <strong class="jxr_keyword">this</strong>.scannerName + <span class="jxr_string">" lease expired, but no related"</span> +
-<a class="jxr_linenumber" name="378" href="#378">378</a>           <span class="jxr_string">" scanner found, hence no chance to close that related scanner!"</span>);
-<a class="jxr_linenumber" name="379" href="#379">379</a>       }
-<a class="jxr_linenumber" name="380" href="#380">380</a>     }
-<a class="jxr_linenumber" name="381" href="#381">381</a>   }
-<a class="jxr_linenumber" name="382" href="#382">382</a> 
-<a class="jxr_linenumber" name="383" href="#383">383</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> ResultOrException getResultOrException(
-<a class="jxr_linenumber" name="384" href="#384">384</a>       <strong class="jxr_keyword">final</strong> ClientProtos.Result r, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> index, <strong class="jxr_keyword">final</strong> ClientProtos.RegionLoadStats stats) {
-<a class="jxr_linenumber" name="385" href="#385">385</a>     <strong class="jxr_keyword">return</strong> getResultOrException(ResponseConverter.buildActionResult(r, stats), index);
-<a class="jxr_linenumber" name="386" href="#386">386</a>   }
-<a class="jxr_linenumber" name="387" href="#387">387</a> 
-<a class="jxr_linenumber" name="388" href="#388">388</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> ResultOrException getResultOrException(<strong class="jxr_keyword">final</strong> Exception e, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> index) {
-<a class="jxr_linenumber" name="389" href="#389">389</a>     <strong class="jxr_keyword">return</strong> getResultOrException(ResponseConverter.buildActionResult(e), index);
-<a class="jxr_linenumber" name="390" href="#390">390</a>   }
-<a class="jxr_linenumber" name="391" href="#391">391</a> 
-<a class="jxr_linenumber" name="392" href="#392">392</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> ResultOrException getResultOrException(
-<a class="jxr_linenumber" name="393" href="#393">393</a>       <strong class="jxr_keyword">final</strong> ResultOrException.Builder builder, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> index) {
-<a class="jxr_linenumber" name="394" href="#394">394</a>     <strong class="jxr_keyword">return</strong> builder.setIndex(index).build();
-<a class="jxr_linenumber" name="395" href="#395">395</a>   }
-<a class="jxr_linenumber" name="396" href="#396">396</a> 
-<a class="jxr_linenumber" name="397" href="#397">397</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="398" href="#398">398</a> <em class="jxr_javadoccomment">   * Starts the nonce operation for a mutation, if needed.</em>
-<a class="jxr_linenumber" name="399" href="#399">399</a> <em class="jxr_javadoccomment">   * @param mutation Mutation.</em>
-<a class="jxr_linenumber" name="400" href="#400">400</a> <em class="jxr_javadoccomment">   * @param nonceGroup Nonce group from the request.</em>
-<a class="jxr_linenumber" name="401" href="#401">401</a> <em class="jxr_javadoccomment">   * @returns Nonce used (can be NO_NONCE).</em>
-<a class="jxr_linenumber" name="402" href="#402">402</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="403" href="#403">403</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> startNonceOperation(<strong class="jxr_keyword">final</strong> MutationProto mutation, <strong class="jxr_keyword">long</strong> nonceGroup)
-<a class="jxr_linenumber" name="404" href="#404">404</a>       <strong class="jxr_keyword">throws</strong> IOException, <a href="../../../../../org/apache/hadoop/hbase/exceptions/OperationConflictException.html">OperationConflictException</a> {
-<a class="jxr_linenumber" name="405" href="#405">405</a>     <strong class="jxr_keyword">if</strong> (regionServer.nonceManager == <strong class="jxr_keyword">null</strong> || !mutation.hasNonce()) <strong class="jxr_keyword">return</strong> HConstants.NO_NONCE;
-<a class="jxr_linenumber" name="406" href="#406">406</a>     <strong class="jxr_keyword">boolean</strong> canProceed = false;
-<a class="jxr_linenumber" name="407" href="#407">407</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="408" href="#408">408</a>       canProceed = regionServer.nonceManager.startOperation(
-<a class="jxr_linenumber" name="409" href="#409">409</a>         nonceGroup, mutation.getNonce(), re

<TRUNCATED>

[18/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-spark/index.html b/hbase-spark/index.html
index 605a097..dea0604 100644
--- a/hbase-spark/index.html
+++ b/hbase-spark/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-17</span>
+        <span id="publishDate">Last Published: 2015-12-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-spark/integration.html b/hbase-spark/integration.html
index 1573ce8..31b123f 100644
--- a/hbase-spark/integration.html
+++ b/hbase-spark/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-17</span>
+        <span id="publishDate">Last Published: 2015-12-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-reports.html b/hbase-spark/project-reports.html
index 4a1c21b..697e28d 100644
--- a/hbase-spark/project-reports.html
+++ b/hbase-spark/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-17</span>
+        <span id="publishDate">Last Published: 2015-12-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-spark/team-list.html b/hbase-spark/team-list.html
index 7080d25..51bc797 100644
--- a/hbase-spark/team-list.html
+++ b/hbase-spark/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-17</span>
+        <span id="publishDate">Last Published: 2015-12-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 0f80eb4..45a778b 100644
--- a/index.html
+++ b/index.html
@@ -7,14 +7,14 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <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" />
     <link rel="stylesheet" href="./css/site.css" />
     <link rel="stylesheet" href="./css/print.css" media="print" />
 
-
+      
     <script type="text/javascript" src="./js/apache-maven-fluido-1.5-HBASE.min.js"></script>
 
                           
@@ -420,7 +420,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 1fa8821..2fc56d0 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Continuous Integration</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index bb2c215..f06cb8e 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Tracking</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -287,7 +287,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 2d015ca..d27da62 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project License</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -490,7 +490,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index a950ca5..70e91e1 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 2d6c75b..401e66a 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -458,7 +458,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/modules.html
----------------------------------------------------------------------
diff --git a/modules.html b/modules.html
index f492625..00c8ff4 100644
--- a/modules.html
+++ b/modules.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Modules</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 547ce81..a774b68 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -413,7 +413,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index b340494..c77f933 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -423,7 +423,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 65c97bf..5f3ff59 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Build Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 3d11cb5..05b5db8 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <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" />
@@ -754,7 +754,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index af3d77c..01723d0 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index eb4c6d9..a4c60a6 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -310,7 +310,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index b035530..61e9627 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -330,7 +330,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 4859693..8e0cfc7 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -307,7 +307,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 48fec64..ac1fc29 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -302,7 +302,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 3540355..2941e67 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -324,7 +324,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 8e47884..00dba7a 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Repository</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -298,7 +298,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 1776b77..790d7a7 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -332,7 +332,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index f43c4f7..f39c248 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -519,7 +519,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 7431beb..8aa73b4 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Team list</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -785,7 +785,7 @@ window.onLoad = init();
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 8dff00a..9163829 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -31365,6 +31365,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/blockmeta/TestBlockMeta.html#TestBlockMeta()">TestBlockMeta()</a></span> - Constructor for class org.apache.hadoop.hbase.codec.prefixtree.blockmeta.<a href="./org/apache/hadoop/hbase/codec/prefixtree/blockmeta/TestBlockMeta.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.blockmeta">TestBlockMeta</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#testBlockMultiLimits()">testBlockMultiLimits()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html" title="class in org.apache.hadoop.hbase.client">TestMultiRespectsLimits</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/fs/TestBlockReorder.html" title="class in org.apache.hadoop.hbase.fs"><span class="strong">TestBlockReorder</span></a> - Class in <a href="./org/apache/hadoop/hbase/fs/package-summary.html">org.apache.hadoop.hbase.fs</a></dt>
 <dd>
 <div class="block">Tests for the hdfs fix from HBASE-6435.</div>
@@ -32197,7 +32199,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestServerNonceManager.html#testCleanup()">testCleanup()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestServerNonceManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#testCleanupFailoverQueues()">testCleanupFailoverQueues()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
 <dd>&nbsp;</dd>
@@ -35810,7 +35812,7 @@
 <div class="block">Test, on HDFS, that the FileLink is still readable
  even when the current file gets renamed.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></dt>
 <dd>
 <div class="block">This creates and fixes a bad table with a missing region -- hole in meta
  and data present but .regioinfino missing (an orphan hdfs region)in the fs.</div>
@@ -39135,7 +39137,7 @@
 <dd>
 <div class="block">Test waiting on meat w/ no timeout specified.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInHdfs()">testNotInHdfs()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testNotInHdfs()">testNotInHdfs()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></dt>
 <dd>
 <div class="block">This creates and fixes a bad table with a region that is in meta but has
  no deployment or data hdfs</div>
@@ -39145,11 +39147,11 @@
 <div class="block">This creates and fixes a bad table with a region that is in meta but has
  no deployment or data hdfs.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaHole()">testNotInMetaHole()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testNotInMetaHole()">testNotInMetaHole()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></dt>
 <dd>
 <div class="block">This creates fixes a bad table with a hole in meta.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHole()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHole()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></dt>
 <dd>
 <div class="block">This creates and fixes a bad table with a region that is missing meta and
  not assigned to a region server.</div>
@@ -40182,7 +40184,7 @@
 <dd>
 <div class="block">This creates a table and then corrupts a mob file.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></dt>
 <dd>
 <div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
  has removed an colfam dir before the corruption checker got to it.</div>
@@ -40192,7 +40194,7 @@
 <div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
  has removed an hfile after the corruption checker learned about it.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></dt>
 <dd>
 <div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
  has removed a region dir before the corruption checker got to it.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
index 9617b91..f22022f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.47">TestMultiRespectsLimits</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.52">TestMultiRespectsLimits</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This test sets the multi size WAAAAAY low and then checks to make sure that gets will still make
  progress.</div>
@@ -175,6 +175,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#testBlockMultiLimits()">testBlockMultiLimits</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#testMultiLimits()">testMultiLimits</a></strong>()</code>&nbsp;</td>
 </tr>
 </table>
@@ -205,7 +209,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.48">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.53">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="METRICS_ASSERT">
@@ -214,7 +218,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_ASSERT</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/test/MetricsAssertHelper.html" title="interface in org.apache.hadoop.hbase.test">MetricsAssertHelper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.49">METRICS_ASSERT</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/test/MetricsAssertHelper.html" title="interface in org.apache.hadoop.hbase.test">MetricsAssertHelper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.54">METRICS_ASSERT</a></pre>
 </li>
 </ul>
 <a name="FAMILY">
@@ -223,7 +227,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.51">FAMILY</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.56">FAMILY</a></pre>
 </li>
 </ul>
 <a name="MAX_SIZE">
@@ -232,7 +236,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MAX_SIZE</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.52">MAX_SIZE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.57">MAX_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TestMultiRespectsLimits.MAX_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -250,7 +254,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestMultiRespectsLimits</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.47">TestMultiRespectsLimits</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.52">TestMultiRespectsLimits</a>()</pre>
 </li>
 </ul>
 </li>
@@ -267,7 +271,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.55">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.60">setUpBeforeClass</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -279,7 +283,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.65">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.70">tearDownAfterClass</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -288,15 +292,27 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="testMultiLimits()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testMultiLimits</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.70">testMultiLimits</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.75">testMultiLimits</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
 </li>
 </ul>
+<a name="testBlockMultiLimits()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testBlockMultiLimits</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html#line.114">testBlockMultiLimits</a>()
+                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.MyMasterRpcServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.MyMasterRpcServices.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.MyMasterRpcServices.html
index d693405..19aebe2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.MyMasterRpcServices.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.MyMasterRpcServices.html
@@ -213,7 +213,7 @@ extends org.apache.hadoop.hbase.master.MasterRpcServices</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.RSRpcServices</h3>
-<code>addScanner, bulkLoadHFile, checkOOME, checkOpen, closeRegion, execRegionServerService, execService, flushRegion, get, getConfiguration, getDeadline, getHostname, getOnlineRegion, getPriority, getPriority, getRegion, getScanner, getScannerVirtualTime, getServerInfo, getSocketAddress, getStoreFile, getWAL, mergeRegions, multi, mutate, onConfigurationChange, openRegion, replay, replicateWALEntry, rollWALWriter, scan, splitRegion, start, stop, stopServer, updateConfiguration, updateFavoredNodes, warmupRegion</code></li>
+<code>addScanner, addSize, bulkLoadHFile, checkOOME, checkOpen, closeRegion, execRegionServerService, execService, flushRegion, get, getConfiguration, getDeadline, getHostname, getOnlineRegion, getPriority, getPriority, getRegion, getScanner, getScannerVirtualTime, getServerInfo, getSocketAddress, getStoreFile, getWAL, mergeRegions, multi, mutate, onConfigurationChange, openRegion, replay, replicateWALEntry, rollWALWriter, scan, splitRegion, start, stop, stopServer, updateConfiguration, updateFavoredNodes, warmupRegion</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/d917c66a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
index e6b1d65..1f88b60 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRPCServices.html
@@ -198,7 +198,7 @@ extends org.apache.hadoop.hbase.regionserver.RSRpcServices</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.RSRpcServices</h3>
-<code><clinit>, addScanner, bulkLoadHFile, checkOOME, checkOpen, closeRegion, compactRegion, createPriority, execRegionServerService, execService, flushRegion, get, getConfiguration, getDeadline, getHostname, getOnlineRegion, getPriority, getPriority, getRegion, getRegionInfo, getScanner, getScannerVirtualTime, getServerInfo, getServices, getSocketAddress, getStoreFile, getWAL, mergeRegions, multi, mutate, onConfigurationChange, openRegion, replay, replicateWALEntry, rollWALWriter, splitRegion, start, stop, stopServer, updateConfiguration, updateFavoredNodes, warmupRegion</code></li>
+<code><clinit>, addScanner, addSize, bulkLoadHFile, checkOOME, checkOpen, closeRegion, compactRegion, createPriority, execRegionServerService, execService, flushRegion, get, getConfiguration, getDeadline, getHostname, getOnlineRegion, getPriority, getPriority, getRegion, getRegionInfo, getScanner, getScannerVirtualTime, getServerInfo, getServices, getSocketAddress, getStoreFile, getWAL, mergeRegions, multi, mutate, onConfigurationChange, openRegion, replay, replicateWALEntry, rollWALWriter, splitRegion, start, stop, stopServer, updateConfiguration, updateFavoredNodes, warmupRegion</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/d917c66a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMasterRpcServices.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMasterRpcServices.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMasterRpcServices.html
index 7af3f10..cc52d5a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMasterRpcServices.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.MyMasterRpcServices.html
@@ -213,7 +213,7 @@ extends org.apache.hadoop.hbase.master.MasterRpcServices</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.RSRpcServices</h3>
-<code>addScanner, bulkLoadHFile, checkOOME, checkOpen, closeRegion, execRegionServerService, execService, flushRegion, get, getConfiguration, getDeadline, getHostname, getOnlineRegion, getPriority, getPriority, getRegion, getScanner, getScannerVirtualTime, getServerInfo, getSocketAddress, getStoreFile, getWAL, mergeRegions, multi, mutate, onConfigurationChange, openRegion, replay, replicateWALEntry, rollWALWriter, scan, splitRegion, start, stop, stopServer, updateConfiguration, updateFavoredNodes, warmupRegion</code></li>
+<code>addScanner, addSize, bulkLoadHFile, checkOOME, checkOpen, closeRegion, execRegionServerService, execService, flushRegion, get, getConfiguration, getDeadline, getHostname, getOnlineRegion, getPriority, getPriority, getRegion, getScanner, getScannerVirtualTime, getServerInfo, getSocketAddress, getStoreFile, getWAL, mergeRegions, multi, mutate, onConfigurationChange, openRegion, replay, replicateWALEntry, rollWALWriter, scan, splitRegion, start, stop, stopServer, updateConfiguration, updateFavoredNodes, warmupRegion</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/d917c66a/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 70b67b9..1075d6b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -541,8 +541,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">TestAtomicOperation.TestStep</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html b/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
index 6d7d36e..e95ebda 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.894">BaseTestHBaseFsck.MasterSyncObserver</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#line.593">BaseTestHBaseFsck.MasterSyncObserver</a>
 extends org.apache.hadoop.hbase.coprocessor.BaseMasterObserver</pre>
 </li>
 </ul>
@@ -236,7 +236,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseMasterObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>tableCreationLatch</h4>
-<pre>volatile&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.895">tableCreationLatch</a></pre>
+<pre>volatile&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.594">tableCreationLatch</a></pre>
 </li>
 </ul>
 <a name="tableDeletionLatch">
@@ -245,7 +245,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseMasterObserver</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tableDeletionLatch</h4>
-<pre>volatile&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.896">tableDeletionLatch</a></pre>
+<pre>volatile&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.595">tableDeletionLatch</a></pre>
 </li>
 </ul>
 </li>
@@ -262,7 +262,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseMasterObserver</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BaseTestHBaseFsck.MasterSyncObserver</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.894">BaseTestHBaseFsck.MasterSyncObserver</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.593">BaseTestHBaseFsck.MasterSyncObserver</a>()</pre>
 </li>
 </ul>
 </li>
@@ -279,7 +279,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseMasterObserver</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>postCreateTableHandler</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.899">postCreateTableHandler</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.598">postCreateTableHandler</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                           org.apache.hadoop.hbase.HTableDescriptor&nbsp;desc,
                           org.apache.hadoop.hbase.HRegionInfo[]&nbsp;regions)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -298,7 +298,7 @@ extends org.apache.hadoop.hbase.coprocessor.BaseMasterObserver</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>postDeleteTableHandler</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.908">postDeleteTableHandler</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html#line.607">postDeleteTableHandler</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
                           org.apache.hadoop.hbase.TableName&nbsp;tableName)
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>


[43/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
index e527cc5..7bdd47e 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.1232">RpcServer.Connection</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.1243">RpcServer.Connection</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Reads calls from a connection and queues them for handling.</div>
 </li>
@@ -454,7 +454,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>connectionPreambleRead</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1234">connectionPreambleRead</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1245">connectionPreambleRead</a></pre>
 </li>
 </ul>
 <a name="connectionHeaderRead">
@@ -463,7 +463,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>connectionHeaderRead</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1236">connectionHeaderRead</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1247">connectionHeaderRead</a></pre>
 </li>
 </ul>
 <a name="channel">
@@ -472,7 +472,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>channel</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1237">channel</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1248">channel</a></pre>
 </li>
 </ul>
 <a name="data">
@@ -481,7 +481,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>data</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1238">data</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1249">data</a></pre>
 </li>
 </ul>
 <a name="dataLengthBuffer">
@@ -490,7 +490,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>dataLengthBuffer</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1239">dataLengthBuffer</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1250">dataLengthBuffer</a></pre>
 </li>
 </ul>
 <a name="responseQueue">
@@ -499,7 +499,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>responseQueue</h4>
-<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedDeque.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedDeque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1240">responseQueue</a></pre>
+<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedDeque.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentLinkedDeque</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1251">responseQueue</a></pre>
 </li>
 </ul>
 <a name="responseWriteLock">
@@ -508,7 +508,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>responseWriteLock</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1241">responseWriteLock</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1252">responseWriteLock</a></pre>
 </li>
 </ul>
 <a name="rpcCount">
@@ -517,7 +517,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcCount</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Counter.html" title="class in org.apache.hadoop.hbase.util">Counter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1242">rpcCount</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Counter.html" title="class in org.apache.hadoop.hbase.util">Counter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1253">rpcCount</a></pre>
 </li>
 </ul>
 <a name="lastContact">
@@ -526,7 +526,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>lastContact</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1243">lastContact</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1254">lastContact</a></pre>
 </li>
 </ul>
 <a name="addr">
@@ -535,7 +535,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addr</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1244">addr</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1255">addr</a></pre>
 </li>
 </ul>
 <a name="socket">
@@ -544,7 +544,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>socket</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html?is-external=true" title="class or interface in java.net">Socket</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1245">socket</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html?is-external=true" title="class or interface in java.net">Socket</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1256">socket</a></pre>
 </li>
 </ul>
 <a name="hostAddress">
@@ -553,7 +553,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hostAddress</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1248">hostAddress</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1259">hostAddress</a></pre>
 </li>
 </ul>
 <a name="remotePort">
@@ -562,7 +562,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>remotePort</h4>
-<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1249">remotePort</a></pre>
+<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1260">remotePort</a></pre>
 </li>
 </ul>
 <a name="connectionHeader">
@@ -571,7 +571,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>connectionHeader</h4>
-<pre>org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1250">connectionHeader</a></pre>
+<pre>org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1261">connectionHeader</a></pre>
 </li>
 </ul>
 <a name="codec">
@@ -580,7 +580,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>codec</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1254">codec</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1265">codec</a></pre>
 <div class="block">Codec the client asked use.</div>
 </li>
 </ul>
@@ -590,7 +590,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>compressionCodec</h4>
-<pre>private&nbsp;org.apache.hadoop.io.compress.CompressionCodec <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1258">compressionCodec</a></pre>
+<pre>private&nbsp;org.apache.hadoop.io.compress.CompressionCodec <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1269">compressionCodec</a></pre>
 <div class="block">Compression codec the client asked us use.</div>
 </li>
 </ul>
@@ -600,7 +600,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>service</h4>
-<pre>com.google.protobuf.BlockingService <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1259">service</a></pre>
+<pre>com.google.protobuf.BlockingService <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1270">service</a></pre>
 </li>
 </ul>
 <a name="authMethod">
@@ -609,7 +609,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authMethod</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security">AuthMethod</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1261">authMethod</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security">AuthMethod</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1272">authMethod</a></pre>
 </li>
 </ul>
 <a name="saslContextEstablished">
@@ -618,7 +618,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>saslContextEstablished</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1262">saslContextEstablished</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1273">saslContextEstablished</a></pre>
 </li>
 </ul>
 <a name="skipInitialSaslHandshake">
@@ -627,7 +627,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>skipInitialSaslHandshake</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1263">skipInitialSaslHandshake</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1274">skipInitialSaslHandshake</a></pre>
 </li>
 </ul>
 <a name="unwrappedData">
@@ -636,7 +636,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unwrappedData</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1264">unwrappedData</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1275">unwrappedData</a></pre>
 </li>
 </ul>
 <a name="unwrappedDataLengthBuffer">
@@ -645,7 +645,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unwrappedDataLengthBuffer</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1266">unwrappedDataLengthBuffer</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1277">unwrappedDataLengthBuffer</a></pre>
 </li>
 </ul>
 <a name="useSasl">
@@ -654,7 +654,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>useSasl</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1267">useSasl</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1278">useSasl</a></pre>
 </li>
 </ul>
 <a name="saslServer">
@@ -663,7 +663,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>saslServer</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/javax/security/sasl/SaslServer.html?is-external=true" title="class or interface in javax.security.sasl">SaslServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1268">saslServer</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/javax/security/sasl/SaslServer.html?is-external=true" title="class or interface in javax.security.sasl">SaslServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1279">saslServer</a></pre>
 </li>
 </ul>
 <a name="useWrap">
@@ -672,7 +672,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>useWrap</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1269">useWrap</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1280">useWrap</a></pre>
 </li>
 </ul>
 <a name="AUTHORIZATION_FAILED_CALLID">
@@ -681,7 +681,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>AUTHORIZATION_FAILED_CALLID</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1271">AUTHORIZATION_FAILED_CALLID</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1282">AUTHORIZATION_FAILED_CALLID</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.ipc.RpcServer.Connection.AUTHORIZATION_FAILED_CALLID">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -691,7 +691,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authFailedCall</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1272">authFailedCall</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1283">authFailedCall</a></pre>
 </li>
 </ul>
 <a name="authFailedResponse">
@@ -700,7 +700,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authFailedResponse</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html?is-external=true" title="class or interface in java.io">ByteArrayOutputStream</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1275">authFailedResponse</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html?is-external=true" title="class or interface in java.io">ByteArrayOutputStream</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1286">authFailedResponse</a></pre>
 </li>
 </ul>
 <a name="SASL_CALLID">
@@ -709,7 +709,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>SASL_CALLID</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1278">SASL_CALLID</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1289">SASL_CALLID</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.ipc.RpcServer.Connection.SASL_CALLID">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -719,7 +719,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>saslCall</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1279">saslCall</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1290">saslCall</a></pre>
 </li>
 </ul>
 <a name="authenticatedWithFallback">
@@ -728,7 +728,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authenticatedWithFallback</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1283">authenticatedWithFallback</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1294">authenticatedWithFallback</a></pre>
 </li>
 </ul>
 <a name="retryImmediatelySupported">
@@ -737,7 +737,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>retryImmediatelySupported</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1285">retryImmediatelySupported</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1296">retryImmediatelySupported</a></pre>
 </li>
 </ul>
 <a name="attemptingUser">
@@ -746,7 +746,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>attemptingUser</h4>
-<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1287">attemptingUser</a></pre>
+<pre>public&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1298">attemptingUser</a></pre>
 </li>
 </ul>
 <a name="user">
@@ -755,7 +755,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>user</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1288">user</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1299">user</a></pre>
 </li>
 </ul>
 <a name="ugi">
@@ -764,7 +764,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ugi</h4>
-<pre>protected&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1289">ugi</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.security.UserGroupInformation <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1300">ugi</a></pre>
 </li>
 </ul>
 </li>
@@ -781,7 +781,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer.Connection</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1291">RpcServer.Connection</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a>&nbsp;channel,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1302">RpcServer.Connection</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a>&nbsp;channel,
                     long&nbsp;lastContact)</pre>
 </li>
 </ul>
@@ -799,7 +799,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1315">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1326">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -812,7 +812,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getHostAddress</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1319">getHostAddress</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1330">getHostAddress</a>()</pre>
 </li>
 </ul>
 <a name="getHostInetAddress()">
@@ -821,7 +821,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getHostInetAddress</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1323">getHostInetAddress</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1334">getHostInetAddress</a>()</pre>
 </li>
 </ul>
 <a name="getRemotePort()">
@@ -830,7 +830,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRemotePort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1327">getRemotePort</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1338">getRemotePort</a>()</pre>
 </li>
 </ul>
 <a name="setLastContact(long)">
@@ -839,7 +839,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setLastContact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1331">setLastContact</a>(long&nbsp;lastContact)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1342">setLastContact</a>(long&nbsp;lastContact)</pre>
 </li>
 </ul>
 <a name="getVersionInfo()">
@@ -848,7 +848,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getVersionInfo</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.VersionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1335">getVersionInfo</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.VersionInfo&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1346">getVersionInfo</a>()</pre>
 </li>
 </ul>
 <a name="isIdle()">
@@ -857,7 +857,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isIdle</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1343">isIdle</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1354">isIdle</a>()</pre>
 </li>
 </ul>
 <a name="decRpcCount()">
@@ -866,7 +866,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>decRpcCount</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1348">decRpcCount</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1359">decRpcCount</a>()</pre>
 </li>
 </ul>
 <a name="incRpcCount()">
@@ -875,7 +875,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incRpcCount</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1353">incRpcCount</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1364">incRpcCount</a>()</pre>
 </li>
 </ul>
 <a name="timedOut(long)">
@@ -884,7 +884,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>timedOut</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1357">timedOut</a>(long&nbsp;currentTime)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1368">timedOut</a>(long&nbsp;currentTime)</pre>
 </li>
 </ul>
 <a name="getAuthorizedUgi(java.lang.String)">
@@ -893,7 +893,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getAuthorizedUgi</h4>
-<pre>private&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1361">getAuthorizedUgi</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;authorizedId)
+<pre>private&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1372">getAuthorizedUgi</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;authorizedId)
                                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -905,7 +905,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>saslReadAndProcess</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1380">saslReadAndProcess</a>(byte[]&nbsp;saslToken)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1391">saslReadAndProcess</a>(byte[]&nbsp;saslToken)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -919,7 +919,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doRawSaslReply</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1488">doRawSaslReply</a>(<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security">SaslStatus</a>&nbsp;status,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1499">doRawSaslReply</a>(<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security">SaslStatus</a>&nbsp;status,
                   org.apache.hadoop.io.Writable&nbsp;rv,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;errorClass,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;error)
@@ -935,7 +935,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>disposeSasl</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1517">disposeSasl</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1528">disposeSasl</a>()</pre>
 </li>
 </ul>
 <a name="readPreamble()">
@@ -944,7 +944,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>readPreamble</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1528">readPreamble</a>()
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1539">readPreamble</a>()
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -956,7 +956,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>read4Bytes</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1584">read4Bytes</a>()
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1595">read4Bytes</a>()
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -968,7 +968,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>readAndProcess</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1600">readAndProcess</a>()
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1611">readAndProcess</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                           <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Read off the wire. If there is not enough data to read, update the connection state with
@@ -985,7 +985,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>process</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1658">process</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1669">process</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Process the data buffer and clean the connection state for the next call.</div>
@@ -1000,7 +1000,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getFatalConnectionString</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1678">getFatalConnectionString</a>(int&nbsp;version,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1689">getFatalConnectionString</a>(int&nbsp;version,
                               byte&nbsp;authByte)</pre>
 </li>
 </ul>
@@ -1010,7 +1010,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doBadPreambleHandling</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1684">doBadPreambleHandling</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1695">doBadPreambleHandling</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1022,7 +1022,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doBadPreambleHandling</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1688">doBadPreambleHandling</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1699">doBadPreambleHandling</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1035,7 +1035,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>processConnectionHeader</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1698">processConnectionHeader</a>(byte[]&nbsp;buf)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1709">processConnectionHeader</a>(byte[]&nbsp;buf)
                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1047,7 +1047,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupCellBlockCodecs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1761">setupCellBlockCodecs</a>(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader&nbsp;header)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1772">setupCellBlockCodecs</a>(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader&nbsp;header)
                            throws <a href="../../../../../org/apache/hadoop/hbase/ipc/FatalConnectionException.html" title="class in org.apache.hadoop.hbase.ipc">FatalConnectionException</a></pre>
 <div class="block">Set up cell block codecs</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1060,7 +1060,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>processUnwrappedData</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1781">processUnwrappedData</a>(byte[]&nbsp;inBuf)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1792">processUnwrappedData</a>(byte[]&nbsp;inBuf)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1074,7 +1074,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>processOneRpc</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1819">processOneRpc</a>(byte[]&nbsp;buf)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1830">processOneRpc</a>(byte[]&nbsp;buf)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                            <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1088,7 +1088,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>processRequest</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1841">processRequest</a>(byte[]&nbsp;buf)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1852">processRequest</a>(byte[]&nbsp;buf)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>buf</code> - Has the request header and the request param and optionally encoded data buffer
@@ -1104,7 +1104,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>authorizeConnection</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1930">authorizeConnection</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1941">authorizeConnection</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1116,7 +1116,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1955">close</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1966">close</a>()</pre>
 </li>
 </ul>
 <a name="createUser(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader)">
@@ -1125,7 +1125,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createUser</h4>
-<pre>private&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1967">createUser</a>(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader&nbsp;head)</pre>
+<pre>private&nbsp;org.apache.hadoop.security.UserGroupInformation&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#line.1978">createUser</a>(org.apache.hadoop.hbase.protobuf.generated.RPCProtos.ConnectionHeader&nbsp;head)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
index e01f0e6..2a3ee2a 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.650">RpcServer.Listener.Reader</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.661">RpcServer.Listener.Reader</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
 </li>
@@ -215,7 +215,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>adding</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.651">adding</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.662">adding</a></pre>
 </li>
 </ul>
 <a name="readSelector">
@@ -224,7 +224,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>readSelector</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html?is-external=true" title="class or interface in java.nio.channels">Selector</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.652">readSelector</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html?is-external=true" title="class or interface in java.nio.channels">Selector</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.663">readSelector</a></pre>
 </li>
 </ul>
 </li>
@@ -241,7 +241,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer.Listener.Reader</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.654">RpcServer.Listener.Reader</a>()
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.665">RpcServer.Listener.Reader</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -261,7 +261,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.658">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.669">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -274,7 +274,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>doRunLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.670">doRunLoop</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.681">doRunLoop</a>()</pre>
 </li>
 </ul>
 <a name="startAdd()">
@@ -283,7 +283,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>startAdd</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.704">startAdd</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.715">startAdd</a>()</pre>
 <div class="block">This gets reader into the state that waits for the new channel
  to be registered with readSelector. If it was waiting in select()
  the thread will be woken up, otherwise whenever select() is called
@@ -297,7 +297,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>registerChannel</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.709">registerChannel</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a>&nbsp;channel)
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.720">registerChannel</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html?is-external=true" title="class or interface in java.nio.channels">SocketChannel</a>&nbsp;channel)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -309,7 +309,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>finishAdd</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.714">finishAdd</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html#line.725">finishAdd</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
index 7d1a45d..54cd479 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.602">RpcServer.Listener</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.613">RpcServer.Listener</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 <div class="block">Listens on the socket. Creates jobs for the handler threads</div>
 </li>
@@ -300,7 +300,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>acceptChannel</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/ServerSocketChannel.html?is-external=true" title="class or interface in java.nio.channels">ServerSocketChannel</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.604">acceptChannel</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/ServerSocketChannel.html?is-external=true" title="class or interface in java.nio.channels">ServerSocketChannel</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.615">acceptChannel</a></pre>
 </li>
 </ul>
 <a name="selector">
@@ -309,7 +309,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>selector</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html?is-external=true" title="class or interface in java.nio.channels">Selector</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.605">selector</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html?is-external=true" title="class or interface in java.nio.channels">Selector</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.616">selector</a></pre>
 </li>
 </ul>
 <a name="readers">
@@ -318,7 +318,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>readers</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Listener.Reader</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.606">readers</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Listener.Reader</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.617">readers</a></pre>
 </li>
 </ul>
 <a name="currentReader">
@@ -327,7 +327,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>currentReader</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.607">currentReader</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.618">currentReader</a></pre>
 </li>
 </ul>
 <a name="rand">
@@ -336,7 +336,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rand</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.608">rand</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.619">rand</a></pre>
 </li>
 </ul>
 <a name="lastCleanupRunTime">
@@ -345,7 +345,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>lastCleanupRunTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.609">lastCleanupRunTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.620">lastCleanupRunTime</a></pre>
 </li>
 </ul>
 <a name="cleanupInterval">
@@ -354,7 +354,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupInterval</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.611">cleanupInterval</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.622">cleanupInterval</a></pre>
 </li>
 </ul>
 <a name="backlogLength">
@@ -363,7 +363,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>backlogLength</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.613">backlogLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.624">backlogLength</a></pre>
 </li>
 </ul>
 <a name="readPool">
@@ -372,7 +372,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>readPool</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.615">readPool</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.626">readPool</a></pre>
 </li>
 </ul>
 </li>
@@ -389,7 +389,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer.Listener</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.617">RpcServer.Listener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.628">RpcServer.Listener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -409,7 +409,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupConnections</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.727">cleanupConnections</a>(boolean&nbsp;force)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.738">cleanupConnections</a>(boolean&nbsp;force)</pre>
 <div class="block">cleanup connections from connectionList. Choose a random range
  to scan and also have a limit on the number of the connections
  that will be cleanedup per run. The criteria for cleanup is the time
@@ -424,7 +424,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.771">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.782">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -439,7 +439,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>closeCurrentConnection</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.839">closeCurrentConnection</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.850">closeCurrentConnection</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key,
                           <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 </li>
 </ul>
@@ -449,7 +449,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getAddress</h4>
-<pre><a href="http://docs.oracle.com/javase/7/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/ipc/RpcServer.Listener.html#line.853">getAddress</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/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/ipc/RpcServer.Listener.html#line.864">getAddress</a>()</pre>
 </li>
 </ul>
 <a name="doAccept(java.nio.channels.SelectionKey)">
@@ -458,7 +458,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doAccept</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.857">doAccept</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.868">doAccept</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key)
         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/OutOfMemoryError.html?is-external=true" title="class or interface in java.lang">OutOfMemoryError</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -472,7 +472,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doRead</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.891">doRead</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.902">doRead</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key)
       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd></dl>
@@ -484,7 +484,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doStop</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.923">doStop</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.934">doStop</a>()</pre>
 </li>
 </ul>
 <a name="getReader()">
@@ -493,7 +493,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getReader</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Listener.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.940">getReader</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Listener.Reader.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Listener.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#line.951">getReader</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
index 8d1dab2..352e34d 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>protected class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.947">RpcServer.Responder</a>
+<pre>protected class <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.html#line.958">RpcServer.Responder</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 </li>
 </ul>
@@ -273,7 +273,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writeSelector</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html?is-external=true" title="class or interface in java.nio.channels">Selector</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.948">writeSelector</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html?is-external=true" title="class or interface in java.nio.channels">Selector</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.959">writeSelector</a></pre>
 </li>
 </ul>
 <a name="writingCons">
@@ -282,7 +282,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>writingCons</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.949">writingCons</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.960">writingCons</a></pre>
 </li>
 </ul>
 </li>
@@ -299,7 +299,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RpcServer.Responder</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.952">RpcServer.Responder</a>()
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.963">RpcServer.Responder</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -319,7 +319,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.959">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.970">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -334,7 +334,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>registerWrites</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.977">registerWrites</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.988">registerWrites</a>()</pre>
 <div class="block">Take the list of the connections that want to write, and register them
  in the selector.</div>
 </li>
@@ -345,7 +345,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>registerForWrite</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1004">registerForWrite</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;c)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1015">registerForWrite</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;c)</pre>
 <div class="block">Add a connection to the list that want to write,</div>
 </li>
 </ul>
@@ -355,7 +355,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doRunLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1010">doRunLoop</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1021">doRunLoop</a>()</pre>
 </li>
 </ul>
 <a name="purge(long)">
@@ -364,7 +364,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>purge</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1069">purge</a>(long&nbsp;lastPurgeTime)</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1080">purge</a>(long&nbsp;lastPurgeTime)</pre>
 <div class="block">If there were some calls that have not been sent out for a
  long time, we close the connection.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the time of the purge.</dd></dl>
@@ -376,7 +376,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doAsyncWrite</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1098">doAsyncWrite</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1109">doAsyncWrite</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SelectionKey.html?is-external=true" title="class or interface in java.nio.channels">SelectionKey</a>&nbsp;key)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -388,7 +388,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>processResponse</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1131">processResponse</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a>&nbsp;call)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1142">processResponse</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a>&nbsp;call)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Process the response for this call. You need to have the lock on
  <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html#responseWriteLock"><code>RpcServer.Connection.responseWriteLock</code></a></div>
@@ -404,7 +404,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>processAllResponses</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1164">processAllResponses</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;connection)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1175">processAllResponses</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Connection.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Connection</a>&nbsp;connection)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Process all the responses for this connection</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if all the calls were processed or that someone else is doing it.
@@ -420,7 +420,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doRespond</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1189">doRespond</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a>&nbsp;call)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/ipc/RpcServer.Responder.html#line.1200">doRespond</a>(<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServer.Call.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Call</a>&nbsp;call)
          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>


[14/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
index e760e81..063701f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html
@@ -26,937 +26,636 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.util;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertErrors;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertNoErrors;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.doFsck;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.assertEquals;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.junit.Assert.assertFalse;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.junit.Assert.assertNotEquals;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.junit.Assert.assertNotNull;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.junit.Assert.assertTrue;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.junit.Assert.fail;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.io.IOException;<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.Collection;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.HashMap;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Map;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.UUID;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.CountDownLatch;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.ExecutorService;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.commons.logging.Log;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.LogFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileStatus;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HConstants;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.ServerName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableName;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.HBaseAdmin;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Put;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Table;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.master.AssignmentManager;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.mob.MobFileName;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.mob.MobUtils;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionImpl;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.zookeeper.KeeperException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.junit.Assert;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.junit.Before;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.junit.Ignore;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.junit.Test;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.junit.rules.TestName;<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> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.<a name="line.101"></a>
-<span class="sourceLineNo">102</span> *<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * Actual tests are in :<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * TestHBaseFsckTwoRS<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * TestHBaseFsckOneRS<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * TestHBaseFsckMOB<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * TestHBaseFsckReplicas<a name="line.107"></a>
-<span class="sourceLineNo">108</span> */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>public class BaseTestHBaseFsck {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  static final int POOL_SIZE = 7;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected static final Log LOG = LogFactory.getLog(BaseTestHBaseFsck.class);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected final static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  protected final static String FAM_STR = "fam";<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  protected final static byte[] FAM = Bytes.toBytes(FAM_STR);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  protected final static int REGION_ONLINE_TIMEOUT = 800;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  protected static RegionStates regionStates;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  protected static ExecutorService tableExecutorService;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  protected static ScheduledThreadPoolExecutor hbfsckExecutorService;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  protected static ClusterConnection connection;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  protected static Admin admin;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  // for the instance, reset every test run<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  protected Table tbl;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  protected final static byte[][] SPLITS = new byte[][] { Bytes.toBytes("A"),<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Bytes.toBytes("B"), Bytes.toBytes("C") };<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // one row per region.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  protected final static byte[][] ROWKEYS= new byte[][] {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    Bytes.toBytes("00"), Bytes.toBytes("50"), Bytes.toBytes("A0"), Bytes.toBytes("A5"),<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Bytes.toBytes("B0"), Bytes.toBytes("B5"), Bytes.toBytes("C0"), Bytes.toBytes("C5") };<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>   * Create a new region in META.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  protected HRegionInfo createRegion(final HTableDescriptor<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      htd, byte[] startKey, byte[] endKey)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(), startKey, endKey);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    MetaTableAccessor.addRegionToMeta(meta, hri);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    meta.close();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return hri;<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>   * Debugging method to dump the contents of meta.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  protected void dumpMeta(TableName tableName) throws IOException {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    for (byte[] row : metaRows) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      LOG.info(Bytes.toString(row));<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>  /**<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * This method is used to undeploy a region -- close it and attempt to<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * remove its state from the Master.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  protected void undeployRegion(Connection conn, ServerName sn,<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      HRegionInfo hri) throws IOException, InterruptedException {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (!hri.isMetaTable()) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        admin.offline(hri.getRegionName());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    } catch (IOException ioe) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      LOG.warn("Got exception when attempting to offline region "<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          + Bytes.toString(hri.getRegionName()), ioe);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param unassign if true unassign region if assigned<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param metaRow  if true remove region's row from META<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      boolean hdfs) throws IOException, InterruptedException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @param unassign if true unassign region if assigned<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param metaRow  if true remove region's row from META<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param regionInfoOnly if true remove a region dir's .regioninfo file<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param replicaId replica id<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      boolean hdfs, boolean regionInfoOnly, int replicaId)<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          throws IOException, InterruptedException {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    LOG.info("** Before delete:");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    dumpMeta(htd.getTableName());<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    List&lt;HRegionLocation&gt; locations;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    try(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      locations = rl.getAllRegionLocations();<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>    for (HRegionLocation location : locations) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      HRegionInfo hri = location.getRegionInfo();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      ServerName hsa = location.getServerName();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (Bytes.compareTo(hri.getStartKey(), startKey) == 0<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          &amp;&amp; hri.getReplicaId() == replicaId) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>        LOG.info("RegionName: " +hri.getRegionNameAsString());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        byte[] deleteRow = hri.getRegionName();<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (unassign) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.info("Undeploying region " + hri + " from server " + hsa);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          undeployRegion(connection, hsa, hri);<a name="line.217"></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.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Collection;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.UUID;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.CountDownLatch;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ExecutorService;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.Log;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.commons.logging.LogFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileStatus;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileSystem;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.Path;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Put;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Table;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.mob.MobFileName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.mob.MobUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.zookeeper.KeeperException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.junit.rules.TestName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>/**<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Actual tests are in :<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * TestHBaseFsckTwoRS<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * TestHBaseFsckOneRS<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * TestHBaseFsckMOB<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * TestHBaseFsckReplicas<a name="line.85"></a>
+<span class="sourceLineNo">086</span> */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>public class BaseTestHBaseFsck {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  static final int POOL_SIZE = 7;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected static final Log LOG = LogFactory.getLog(BaseTestHBaseFsck.class);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  protected final static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected final static String FAM_STR = "fam";<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  protected final static byte[] FAM = Bytes.toBytes(FAM_STR);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  protected final static int REGION_ONLINE_TIMEOUT = 800;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static RegionStates regionStates;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static ExecutorService tableExecutorService;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static ScheduledThreadPoolExecutor hbfsckExecutorService;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  protected static ClusterConnection connection;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected static Admin admin;<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  // for the instance, reset every test run<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected Table tbl;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected final static byte[][] SPLITS = new byte[][] { Bytes.toBytes("A"),<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    Bytes.toBytes("B"), Bytes.toBytes("C") };<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // one row per region.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected final static byte[][] ROWKEYS= new byte[][] {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    Bytes.toBytes("00"), Bytes.toBytes("50"), Bytes.toBytes("A0"), Bytes.toBytes("A5"),<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    Bytes.toBytes("B0"), Bytes.toBytes("B5"), Bytes.toBytes("C0"), Bytes.toBytes("C5") };<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>  /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * Create a new region in META.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected HRegionInfo createRegion(final HTableDescriptor<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      htd, byte[] startKey, byte[] endKey)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(), startKey, endKey);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    MetaTableAccessor.addRegionToMeta(meta, hri);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    meta.close();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return hri;<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>   * Debugging method to dump the contents of meta.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  protected void dumpMeta(TableName tableName) throws IOException {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    for (byte[] row : metaRows) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      LOG.info(Bytes.toString(row));<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>  /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * This method is used to undeploy a region -- close it and attempt to<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * remove its state from the Master.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  protected void undeployRegion(Connection conn, ServerName sn,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      HRegionInfo hri) throws IOException, InterruptedException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    try {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      if (!hri.isMetaTable()) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        admin.offline(hri.getRegionName());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    } catch (IOException ioe) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.warn("Got exception when attempting to offline region "<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          + Bytes.toString(hri.getRegionName()), ioe);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param unassign if true unassign region if assigned<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param metaRow  if true remove region's row from META<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      boolean hdfs) throws IOException, InterruptedException {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        HRegionInfo.DEFAULT_REPLICA_ID);<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>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param unassign if true unassign region if assigned<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param metaRow  if true remove region's row from META<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @param regionInfoOnly if true remove a region dir's .regioninfo file<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param replicaId replica id<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      boolean hdfs, boolean regionInfoOnly, int replicaId)<a name="line.173"></a>
+<span class="sourceLineNo">174</span>          throws IOException, InterruptedException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    LOG.info("** Before delete:");<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    dumpMeta(htd.getTableName());<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    List&lt;HRegionLocation&gt; locations;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    try(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      locations = rl.getAllRegionLocations();<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>    for (HRegionLocation location : locations) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      HRegionInfo hri = location.getRegionInfo();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      ServerName hsa = location.getServerName();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      if (Bytes.compareTo(hri.getStartKey(), startKey) == 0<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          &amp;&amp; hri.getReplicaId() == replicaId) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>        LOG.info("RegionName: " +hri.getRegionNameAsString());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        byte[] deleteRow = hri.getRegionName();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>        if (unassign) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          LOG.info("Undeploying region " + hri + " from server " + hsa);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          undeployRegion(connection, hsa, hri);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (regionInfoOnly) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          LOG.info("deleting hdfs .regioninfo data: " + hri.toString() + hsa.toString());<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.202"></a>
+<span class="sourceLineNo">203</span>              hri.getEncodedName());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          Path hriPath = new Path(p, HRegionFileSystem.REGION_INFO_FILE);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          fs.delete(hriPath, true);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (hdfs) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          LOG.info("deleting hdfs data: " + hri.toString() + hsa.toString());<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.212"></a>
+<span class="sourceLineNo">213</span>              hri.getEncodedName());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          HBaseFsck.debugLsr(conf, p);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          boolean success = fs.delete(p, true);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          HBaseFsck.debugLsr(conf, p);<a name="line.217"></a>
 <span class="sourceLineNo">218</span>        }<a name="line.218"></a>
 <span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>        if (regionInfoOnly) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          LOG.info("deleting hdfs .regioninfo data: " + hri.toString() + hsa.toString());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              hri.getEncodedName());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          Path hriPath = new Path(p, HRegionFileSystem.REGION_INFO_FILE);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          fs.delete(hriPath, true);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">220</span>        if (metaRow) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          try (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>            Delete delete = new Delete(deleteRow);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>            meta.delete(delete);<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>      }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      LOG.info(hri.toString() + hsa.toString());<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>        if (hdfs) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          LOG.info("deleting hdfs data: " + hri.toString() + hsa.toString());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.234"></a>
-<span class="sourceLineNo">235</span>              hri.getEncodedName());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          HBaseFsck.debugLsr(conf, p);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          boolean success = fs.delete(p, true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          HBaseFsck.debugLsr(conf, p);<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>        if (metaRow) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          try (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            Delete delete = new Delete(deleteRow);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            meta.delete(delete);<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>      LOG.info(hri.toString() + hsa.toString());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    TEST_UTIL.getMetaTableRows(htd.getTableName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    LOG.info("*** After delete:");<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    dumpMeta(htd.getTableName());<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>   * Setup a clean table before we start mucking with it.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   *<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * It will set tbl which needs to be closed after test<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @throws IOException<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @throws InterruptedException<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * @throws KeeperException<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  void setupTable(TableName tablename) throws Exception {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    setupTableWithRegionReplica(tablename, 1);<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>   * Setup a clean table with a certain region_replica count<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   *<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * It will set tbl which needs to be closed after test<a name="line.273"></a>
+<span class="sourceLineNo">230</span>    TEST_UTIL.getMetaTableRows(htd.getTableName());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    LOG.info("*** After delete:");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    dumpMeta(htd.getTableName());<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * Setup a clean table before we start mucking with it.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   *<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * It will set tbl which needs to be closed after test<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   *<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @throws IOException<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @throws InterruptedException<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @throws KeeperException<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  void setupTable(TableName tablename) throws Exception {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    setupTableWithRegionReplica(tablename, 1);<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>   * Setup a clean table with a certain region_replica count<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   *<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * It will set tbl which needs to be closed after test<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   *<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @throws Exception<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  void setupTableWithRegionReplica(TableName tablename, int replicaCount) throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    desc.setRegionReplication(replicaCount);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    for (byte[] row : ROWKEYS) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      Put p = new Put(row);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      puts.add(p);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    tbl.put(puts);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * Setup a clean table with a mob-enabled column.<a name="line.273"></a>
 <span class="sourceLineNo">274</span>   *<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @throws Exception<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  void setupTableWithRegionReplica(TableName tablename, int replicaCount) throws Exception {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    desc.setRegionReplication(replicaCount);<a name="line.279"></a>
+<span class="sourceLineNo">275</span>   * @param tablename The name of a table to be created.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @throws Exception<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  void setupMobTable(TableName tablename) throws Exception {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.279"></a>
 <span class="sourceLineNo">280</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    for (byte[] row : ROWKEYS) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      Put p = new Put(row);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      puts.add(p);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    tbl.put(puts);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Setup a clean table with a mob-enabled column.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   *<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @param tablename The name of a table to be created.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws Exception<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  void setupMobTable(TableName tablename) throws Exception {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    hcd.setMobEnabled(true);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    hcd.setMobThreshold(0);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (byte[] row : ROWKEYS) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Put p = new Put(row);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      puts.add(p);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    tbl.put(puts);<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>   * Counts the number of row to verify data loss or non-dataloss.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  int countRows() throws IOException {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>     Scan s = new Scan();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>     ResultScanner rs = tbl.getScanner(s);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>     int i = 0;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>     while(rs.next() !=null) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>       i++;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>     }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>     return i;<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>   * delete table in preparation for next test<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * @param tablename<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @throws IOException<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  void cleanupTable(TableName tablename) throws Exception {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    if (tbl != null) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      tbl.close();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      tbl = null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    ((ClusterConnection) connection).clearRegionCache();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    deleteTable(TEST_UTIL, tablename);<a name="line.344"></a>
+<span class="sourceLineNo">281</span>    hcd.setMobEnabled(true);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    hcd.setMobThreshold(0);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    for (byte[] row : ROWKEYS) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      Put p = new Put(row);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      puts.add(p);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    tbl.put(puts);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  /**<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * Counts the number of row to verify data loss or non-dataloss.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  int countRows() throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     Scan s = new Scan();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>     ResultScanner rs = tbl.getScanner(s);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>     int i = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>     while(rs.next() !=null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>       i++;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     return i;<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>   * delete table in preparation for next test<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @param tablename<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * @throws IOException<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  void cleanupTable(TableName tablename) throws Exception {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    if (tbl != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      tbl.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      tbl = null;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>    ((ClusterConnection) connection).clearRegionCache();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    deleteTable(TEST_UTIL, tablename);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * Get region info from local cluster.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(final Admin admin) throws IOException {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    ClusterStatus status = admin.getClusterStatus();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Collection&lt;ServerName&gt; regionServers = status.getServers();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    Map&lt;ServerName, List&lt;String&gt;&gt; mm =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        new HashMap&lt;ServerName, List&lt;String&gt;&gt;();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    for (ServerName hsi : regionServers) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>      // list all online regions from this region server<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      List&lt;String&gt; regionNames = new ArrayList&lt;String&gt;();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      for (HRegionInfo hri : regions) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        regionNames.add(hri.getRegionNameAsString());<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      mm.put(hsi, regionNames);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return mm;<a name="line.344"></a>
 <span class="sourceLineNo">345</span>  }<a name="line.345"></a>
 <span class="sourceLineNo">346</span><a name="line.346"></a>
 <span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * Get region info from local cluster.<a name="line.348"></a>
+<span class="sourceLineNo">348</span>   * Returns the HSI a region info is on.<a name="line.348"></a>
 <span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(final Admin admin) throws IOException {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    ClusterStatus status = admin.getClusterStatus();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    Collection&lt;ServerName&gt; regionServers = status.getServers();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    Map&lt;ServerName, List&lt;String&gt;&gt; mm =<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        new HashMap&lt;ServerName, List&lt;String&gt;&gt;();<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    for (ServerName hsi : regionServers) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>      // list all online regions from this region server<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      List&lt;String&gt; regionNames = new ArrayList&lt;String&gt;();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      for (HRegionInfo hri : regions) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        regionNames.add(hri.getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      mm.put(hsi, regionNames);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return mm;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * Returns the HSI a region info is on.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    for (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (e.getValue().contains(hri.getRegionNameAsString())) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        return e.getKey();<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>    return null;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
+<span class="sourceLineNo">350</span>  ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    for (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (e.getValue().contains(hri.getRegionNameAsString())) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        return e.getKey();<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>    return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public void deleteTableDir(TableName table) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    FileSystem fs = rootDir.getFileSystem(conf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    Path p = FSUtils.getTableDir(rootDir, table);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    HBaseFsck.debugLsr(conf, p);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    boolean success = fs.delete(p, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * We don't have an easy way to verify that a flush completed, so we loop until we find a<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * legitimate hfile and return it.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param fs<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param table<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @return Path of a flushed hfile.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @throws IOException<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  Path getFlushedHFile(FileSystem fs, TableName table) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Path tableDir= FSUtils.getTableDir(FSUtils.getRootDir(conf), table);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    Path regionDir = FSUtils.getRegionDirs(fs, tableDir).get(0);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    Path famDir = new Path(regionDir, FAM_STR);<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><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * This creates and fixes a bad table with a missing region -- hole in meta<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * and data present but .regioinfino missing (an orphan hdfs region)in the fs.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @Test (timeout=180000)<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public void testHDFSRegioninfoMissing() throws Exception {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    TableName table = TableName.valueOf("tableHDFSRegioninfoMissing");<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    try {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      setupTable(table);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.393"></a>
+<span class="sourceLineNo">381</span>    // keep doing this until we get a legit hfile<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    while (true) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      FileStatus[] hfFss = fs.listStatus(famDir);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      if (hfFss.length == 0) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        continue;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      for (FileStatus hfs : hfFss) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        if (!hfs.isDirectory()) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          return hfs.getPath();<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>    }<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>      // Mess it up by leaving a hole in the meta data<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      admin.disableTable(table);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          true, false, true, HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      admin.enableTable(table);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      assertErrors(hbck,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          new ERROR_CODE[] { ERROR_CODE.ORPHAN_HDFS_REGION, ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.403"></a>
-<span class="sourceLineNo">404</span>              ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      // holes are separate from overlap groups<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>      // fix hole<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      doFsck(conf, true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>      // check that hole fixed<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      assertNoErrors(doFsck(conf, false));<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    } finally {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      cleanupTable(table);<a name="line.415"></a>
+<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * Gets flushed mob files.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * @param fs The current file system.<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * @param table The current table name.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return Path of a flushed hfile.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * @throws IOException<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  Path getFlushedMobFile(FileSystem fs, TableName table) throws IOException {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    Path famDir = MobUtils.getMobFamilyPath(conf, table, FAM_STR);<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // keep doing this until we get a legit hfile<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    while (true) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      FileStatus[] hfFss = fs.listStatus(famDir);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if (hfFss.length == 0) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        continue;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      for (FileStatus hfs : hfFss) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if (!hfs.isDirectory()) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          return hfs.getPath();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
 <span class="sourceLineNo">416</span>    }<a name="line.416"></a>
 <span class="sourceLineNo">417</span>  }<a name="line.417"></a>
 <span class="sourceLineNo">418</span><a name="line.418"></a>
 <span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * This creates and fixes a bad table with a region that is missing meta and<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * not assigned to a region server.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  @Test (timeout=180000)<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public void testNotInMetaOrDeployedHole() throws Exception {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    TableName table =<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        TableName.valueOf("tableNotInMetaOrDeployedHole");<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    try {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      setupTable(table);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>      // Mess it up by leaving a hole in the meta data<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      admin.disableTable(table);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          true, false); // don't rm from fs<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      admin.enableTable(table);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      assertErrors(hbck,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED, ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // holes are separate from overlap groups<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>      // fix hole<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      assertErrors(doFsck(conf, true),<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED, ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // check that hole fixed<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      assertNoErrors(doFsck(conf, false));<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    } finally {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      cleanupTable(table);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<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>  @Test (timeout=180000)<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  public void testCleanUpDaughtersNotInMetaAfterFailedSplit() throws Exception {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    TableName table = TableName.valueOf("testCleanUpDaughtersNotInMetaAfterFailedSplit");<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    try {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      HTableDescriptor desc = new HTableDescriptor(table);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      desc.addFamily(new HColumnDescriptor(Bytes.toBytes("f")));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      createTable(TEST_UTIL, desc, null);<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>      tbl = connection.getTable(desc.getTableName());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (int i = 0; i &lt; 5; i++) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        Put p1 = new Put(("r" + i).getBytes());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        p1.addColumn(Bytes.toBytes("f"), "q1".getBytes(), "v".getBytes());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        tbl.put(p1);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      admin.flush(desc.getTableName());<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      List&lt;HRegion&gt; regions = cluster.getRegions(desc.getTableName());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      int serverWith = cluster.getServerWith(regions.get(0).getRegionInfo().getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      HRegionServer regionServer = cluster.getRegionServer(serverWith);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      cluster.getServerWith(regions.get(0).getRegionInfo().getRegionName());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      SplitTransactionImpl st = (SplitTransactionImpl)<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        new SplitTransactionFactory(TEST_UTIL.getConfiguration())<a name="line.476"></a>
-<span class="sourceLineNo">477</span>          .create(regions.get(0), Bytes.toBytes("r3"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      st.prepare();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      st.stepsBeforePONR(regionServer, regionServer, false);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      AssignmentManager am = cluster.getMaster().getAssignmentManager();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Map&lt;String, RegionState&gt; regionsInTransition = am.getRegionStates().getRegionsInTransition();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      for (RegionState state : regionsInTransition.values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        am.regionOffline(state.getRegion());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      Map&lt;HRegionInfo, ServerName&gt; regionsMap = new HashMap&lt;HRegionInfo, ServerName&gt;();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      regionsMap.put(regions.get(0).getRegionInfo(), regionServer.getServerName());<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      am.assign(regionsMap);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      am.waitForAssignment(regions.get(0).getRegionInfo());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          ERROR_CODE.NOT_IN_META_OR_DEPLOYED });<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      // holes are separate from overlap groups<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // fix hole<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      assertErrors(<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          doFsck(conf, false, true, false, false, false, false, false, false, false, false, false,<a name="line.497"></a>
-<span class="sourceLineNo">498</span>            null),<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.499"></a>
-<span class="sourceLineNo">500</span>              ERROR_CODE.NOT_IN_META_OR_DEPLOYED });<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>      // check that hole fixed<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      assertNoErrors(doFsck(conf, false));<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      assertEquals(5, countRows());<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    } finally {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (tbl != null) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        tbl.close();<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        tbl = null;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      cleanupTable(table);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  /**<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * This creates fixes a bad table with a hole in meta.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   */<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  @Test (timeout=180000)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public void testNotInMetaHole() throws Exception {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    TableName table =<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        TableName.valueOf("tableNotInMetaHole");<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      setupTable(table);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.523"></a>
+<span class="sourceLineNo">420</span>   * Creates a new mob file name by the old one.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @param oldFileName The old mob file name.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return The new mob file name.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  String createMobFileName(String oldFileName) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    MobFileName mobFileName = MobFileName.create(oldFileName);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    String startKey = mobFileName.getStartKey();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    String date = mobFileName.getDate();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    return MobFileName.create(startKey, date, UUID.randomUUID().toString().replaceAll("-", ""))<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      .getFileName();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span><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

<TRUNCATED>

[09/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref-test/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html b/xref-test/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
index ee91a78..8fe7c02 100644
--- a/xref-test/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
+++ b/xref-test/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
@@ -28,937 +28,636 @@
 <a class="jxr_linenumber" name="18" href="#18">18</a>  <em class="jxr_javadoccomment"> */</em>
 <a class="jxr_linenumber" name="19" href="#19">19</a>  <strong class="jxr_keyword">package</strong> org.apache.hadoop.hbase.util;
 <a class="jxr_linenumber" name="20" href="#20">20</a>  
-<a class="jxr_linenumber" name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertErrors;
-<a class="jxr_linenumber" name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertNoErrors;
-<a class="jxr_linenumber" name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.doFsck;
-<a class="jxr_linenumber" name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertEquals;
-<a class="jxr_linenumber" name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertFalse;
-<a class="jxr_linenumber" name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertNotEquals;
-<a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertNotNull;
-<a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertTrue;
-<a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.fail;
-<a class="jxr_linenumber" name="30" href="#30">30</a>  
-<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
-<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
-<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> java.util.Collection;
-<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
-<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> java.util.List;
-<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
-<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> java.util.UUID;
-<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.CountDownLatch;
-<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ExecutorService;
-<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ScheduledThreadPoolExecutor;
-<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicBoolean;
-<a class="jxr_linenumber" name="42" href="#42">42</a>  
-<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
-<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
-<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.conf.Configuration;
-<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileStatus;
-<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileSystem;
-<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.Path;
-<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ClusterStatus;
-<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseTestingUtility;
-<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HColumnDescriptor;
-<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
-<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionInfo;
-<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionLocation;
-<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
-<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MiniHBaseCluster;
-<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ServerName;
-<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
-<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MetaTableAccessor;
-<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Admin;
-<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ClusterConnection;
-<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Connection;
-<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ConnectionFactory;
-<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Delete;
-<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Get;
-<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.HBaseAdmin;
-<a class="jxr_linenumber" name="67" href="#67">67</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.HConnection;
-<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Put;
-<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.RegionLocator;
-<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ResultScanner;
-<a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
-<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Table;
-<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;
-<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;
-<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.coprocessor.ObserverContext;
-<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.AssignmentManager;
-<a class="jxr_linenumber" name="77" href="#77">77</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.RegionState;
-<a class="jxr_linenumber" name="78" href="#78">78</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.RegionStates;
-<a class="jxr_linenumber" name="79" href="#79">79</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.mob.MobFileName;
-<a class="jxr_linenumber" name="80" href="#80">80</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.mob.MobUtils;
-<a class="jxr_linenumber" name="81" href="#81">81</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.ProtobufUtil;
-<a class="jxr_linenumber" name="82" href="#82">82</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
-<a class="jxr_linenumber" name="83" href="#83">83</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegion;
-<a class="jxr_linenumber" name="84" href="#84">84</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
-<a class="jxr_linenumber" name="85" href="#85">85</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionServer;
-<a class="jxr_linenumber" name="86" href="#86">86</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.SplitTransactionFactory;
-<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.SplitTransactionImpl;
-<a class="jxr_linenumber" name="88" href="#88">88</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;
-<a class="jxr_linenumber" name="89" href="#89">89</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;
-<a class="jxr_linenumber" name="90" href="#90">90</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;
-<a class="jxr_linenumber" name="91" href="#91">91</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;
-<a class="jxr_linenumber" name="92" href="#92">92</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;
-<a class="jxr_linenumber" name="93" href="#93">93</a>  <strong class="jxr_keyword">import</strong> org.apache.zookeeper.KeeperException;
-<a class="jxr_linenumber" name="94" href="#94">94</a>  <strong class="jxr_keyword">import</strong> org.junit.Assert;
-<a class="jxr_linenumber" name="95" href="#95">95</a>  <strong class="jxr_keyword">import</strong> org.junit.Before;
-<a class="jxr_linenumber" name="96" href="#96">96</a>  <strong class="jxr_keyword">import</strong> org.junit.Ignore;
-<a class="jxr_linenumber" name="97" href="#97">97</a>  <strong class="jxr_keyword">import</strong> org.junit.Test;
-<a class="jxr_linenumber" name="98" href="#98">98</a>  <strong class="jxr_keyword">import</strong> org.junit.rules.TestName;
-<a class="jxr_linenumber" name="99" href="#99">99</a>  
-<a class="jxr_linenumber" name="100" href="#100">100</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="101" href="#101">101</a> <em class="jxr_javadoccomment"> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.</em>
-<a class="jxr_linenumber" name="102" href="#102">102</a> <em class="jxr_javadoccomment"> *</em>
-<a class="jxr_linenumber" name="103" href="#103">103</a> <em class="jxr_javadoccomment"> * Actual tests are in :</em>
-<a class="jxr_linenumber" name="104" href="#104">104</a> <em class="jxr_javadoccomment"> * TestHBaseFsckTwoRS</em>
-<a class="jxr_linenumber" name="105" href="#105">105</a> <em class="jxr_javadoccomment"> * TestHBaseFsckOneRS</em>
-<a class="jxr_linenumber" name="106" href="#106">106</a> <em class="jxr_javadoccomment"> * TestHBaseFsckMOB</em>
-<a class="jxr_linenumber" name="107" href="#107">107</a> <em class="jxr_javadoccomment"> * TestHBaseFsckReplicas</em>
-<a class="jxr_linenumber" name="108" href="#108">108</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="109" href="#109">109</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html">BaseTestHBaseFsck</a> {
-<a class="jxr_linenumber" name="110" href="#110">110</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> POOL_SIZE = 7;
-<a class="jxr_linenumber" name="111" href="#111">111</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(BaseTestHBaseFsck.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="112" href="#112">112</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> TEST_UTIL = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a>();
-<a class="jxr_linenumber" name="113" href="#113">113</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> Configuration conf = TEST_UTIL.getConfiguration();
-<a class="jxr_linenumber" name="114" href="#114">114</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> String FAM_STR = <span class="jxr_string">"fam"</span>;
-<a class="jxr_linenumber" name="115" href="#115">115</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[] FAM = Bytes.toBytes(FAM_STR);
-<a class="jxr_linenumber" name="116" href="#116">116</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> REGION_ONLINE_TIMEOUT = 800;
-<a class="jxr_linenumber" name="117" href="#117">117</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> RegionStates regionStates;
-<a class="jxr_linenumber" name="118" href="#118">118</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> ExecutorService tableExecutorService;
-<a class="jxr_linenumber" name="119" href="#119">119</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> ScheduledThreadPoolExecutor hbfsckExecutorService;
-<a class="jxr_linenumber" name="120" href="#120">120</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> ClusterConnection connection;
-<a class="jxr_linenumber" name="121" href="#121">121</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> Admin admin;
-<a class="jxr_linenumber" name="122" href="#122">122</a> 
-<a class="jxr_linenumber" name="123" href="#123">123</a>   <em class="jxr_comment">// for the instance, reset every test run</em>
-<a class="jxr_linenumber" name="124" href="#124">124</a>   <strong class="jxr_keyword">protected</strong> Table tbl;
-<a class="jxr_linenumber" name="125" href="#125">125</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[][] SPLITS = <strong class="jxr_keyword">new</strong> byte[][] { Bytes.toBytes(<span class="jxr_string">"A"</span>),
-<a class="jxr_linenumber" name="126" href="#126">126</a>     Bytes.toBytes(<span class="jxr_string">"B"</span>), Bytes.toBytes(<span class="jxr_string">"C"</span>) };
-<a class="jxr_linenumber" name="127" href="#127">127</a>   <em class="jxr_comment">// one row per region.</em>
-<a class="jxr_linenumber" name="128" href="#128">128</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[][] ROWKEYS= <strong class="jxr_keyword">new</strong> byte[][] {
-<a class="jxr_linenumber" name="129" href="#129">129</a>     Bytes.toBytes(<span class="jxr_string">"00"</span>), Bytes.toBytes(<span class="jxr_string">"50"</span>), Bytes.toBytes(<span class="jxr_string">"A0"</span>), Bytes.toBytes(<span class="jxr_string">"A5"</span>),
-<a class="jxr_linenumber" name="130" href="#130">130</a>     Bytes.toBytes(<span class="jxr_string">"B0"</span>), Bytes.toBytes(<span class="jxr_string">"B5"</span>), Bytes.toBytes(<span class="jxr_string">"C0"</span>), Bytes.toBytes(<span class="jxr_string">"C5"</span>) };
-<a class="jxr_linenumber" name="131" href="#131">131</a> 
-<a class="jxr_linenumber" name="132" href="#132">132</a> 
-<a class="jxr_linenumber" name="133" href="#133">133</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="134" href="#134">134</a> <em class="jxr_javadoccomment">   * Create a new region in META.</em>
-<a class="jxr_linenumber" name="135" href="#135">135</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="136" href="#136">136</a>   <strong class="jxr_keyword">protected</strong> HRegionInfo createRegion(<strong class="jxr_keyword">final</strong> HTableDescriptor
-<a class="jxr_linenumber" name="137" href="#137">137</a>       htd, byte[] startKey, byte[] endKey)
-<a class="jxr_linenumber" name="138" href="#138">138</a>       <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="139" href="#139">139</a>     Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
-<a class="jxr_linenumber" name="140" href="#140">140</a>     HRegionInfo hri = <strong class="jxr_keyword">new</strong> HRegionInfo(htd.getTableName(), startKey, endKey);
-<a class="jxr_linenumber" name="141" href="#141">141</a>     MetaTableAccessor.addRegionToMeta(meta, hri);
-<a class="jxr_linenumber" name="142" href="#142">142</a>     meta.close();
-<a class="jxr_linenumber" name="143" href="#143">143</a>     <strong class="jxr_keyword">return</strong> hri;
-<a class="jxr_linenumber" name="144" href="#144">144</a>   }
-<a class="jxr_linenumber" name="145" href="#145">145</a> 
-<a class="jxr_linenumber" name="146" href="#146">146</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="147" href="#147">147</a> <em class="jxr_javadoccomment">   * Debugging method to dump the contents of meta.</em>
-<a class="jxr_linenumber" name="148" href="#148">148</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="149" href="#149">149</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> dumpMeta(TableName tableName) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="150" href="#150">150</a>     List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);
-<a class="jxr_linenumber" name="151" href="#151">151</a>     <strong class="jxr_keyword">for</strong> (byte[] row : metaRows) {
-<a class="jxr_linenumber" name="152" href="#152">152</a>       LOG.info(Bytes.toString(row));
-<a class="jxr_linenumber" name="153" href="#153">153</a>     }
-<a class="jxr_linenumber" name="154" href="#154">154</a>   }
-<a class="jxr_linenumber" name="155" href="#155">155</a> 
-<a class="jxr_linenumber" name="156" href="#156">156</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="157" href="#157">157</a> <em class="jxr_javadoccomment">   * This method is used to undeploy a region -- close it and attempt to</em>
-<a class="jxr_linenumber" name="158" href="#158">158</a> <em class="jxr_javadoccomment">   * remove its state from the Master.</em>
-<a class="jxr_linenumber" name="159" href="#159">159</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="160" href="#160">160</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> undeployRegion(Connection conn, ServerName sn,
-<a class="jxr_linenumber" name="161" href="#161">161</a>       HRegionInfo hri) <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="162" href="#162">162</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="163" href="#163">163</a>       HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);
-<a class="jxr_linenumber" name="164" href="#164">164</a>       <strong class="jxr_keyword">if</strong> (!hri.isMetaTable()) {
-<a class="jxr_linenumber" name="165" href="#165">165</a>         admin.offline(hri.getRegionName());
-<a class="jxr_linenumber" name="166" href="#166">166</a>       }
-<a class="jxr_linenumber" name="167" href="#167">167</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
-<a class="jxr_linenumber" name="168" href="#168">168</a>       LOG.warn(<span class="jxr_string">"Got exception when attempting to offline region "</span>
-<a class="jxr_linenumber" name="169" href="#169">169</a>           + Bytes.toString(hri.getRegionName()), ioe);
-<a class="jxr_linenumber" name="170" href="#170">170</a>     }
-<a class="jxr_linenumber" name="171" href="#171">171</a>   }
-<a class="jxr_linenumber" name="172" href="#172">172</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="173" href="#173">173</a> <em class="jxr_javadoccomment">   * Delete a region from assignments, meta, or completely from hdfs.</em>
-<a class="jxr_linenumber" name="174" href="#174">174</a> <em class="jxr_javadoccomment">   * @param unassign if true unassign region if assigned</em>
-<a class="jxr_linenumber" name="175" href="#175">175</a> <em class="jxr_javadoccomment">   * @param metaRow  if true remove region's row from META</em>
-<a class="jxr_linenumber" name="176" href="#176">176</a> <em class="jxr_javadoccomment">   * @param hdfs if true remove region's dir in HDFS</em>
-<a class="jxr_linenumber" name="177" href="#177">177</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="178" href="#178">178</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> deleteRegion(Configuration conf, <strong class="jxr_keyword">final</strong> HTableDescriptor htd,
-<a class="jxr_linenumber" name="179" href="#179">179</a>       byte[] startKey, byte[] endKey, <strong class="jxr_keyword">boolean</strong> unassign, <strong class="jxr_keyword">boolean</strong> metaRow,
-<a class="jxr_linenumber" name="180" href="#180">180</a>       <strong class="jxr_keyword">boolean</strong> hdfs) <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="181" href="#181">181</a>     deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,
-<a class="jxr_linenumber" name="182" href="#182">182</a>         HRegionInfo.DEFAULT_REPLICA_ID);
-<a class="jxr_linenumber" name="183" href="#183">183</a>   }
-<a class="jxr_linenumber" name="184" href="#184">184</a> 
-<a class="jxr_linenumber" name="185" href="#185">185</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="186" href="#186">186</a> <em class="jxr_javadoccomment">   * Delete a region from assignments, meta, or completely from hdfs.</em>
-<a class="jxr_linenumber" name="187" href="#187">187</a> <em class="jxr_javadoccomment">   * @param unassign if true unassign region if assigned</em>
-<a class="jxr_linenumber" name="188" href="#188">188</a> <em class="jxr_javadoccomment">   * @param metaRow  if true remove region's row from META</em>
-<a class="jxr_linenumber" name="189" href="#189">189</a> <em class="jxr_javadoccomment">   * @param hdfs if true remove region's dir in HDFS</em>
-<a class="jxr_linenumber" name="190" href="#190">190</a> <em class="jxr_javadoccomment">   * @param regionInfoOnly if true remove a region dir's .regioninfo file</em>
-<a class="jxr_linenumber" name="191" href="#191">191</a> <em class="jxr_javadoccomment">   * @param replicaId replica id</em>
-<a class="jxr_linenumber" name="192" href="#192">192</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="193" href="#193">193</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> deleteRegion(Configuration conf, <strong class="jxr_keyword">final</strong> HTableDescriptor htd,
-<a class="jxr_linenumber" name="194" href="#194">194</a>       byte[] startKey, byte[] endKey, <strong class="jxr_keyword">boolean</strong> unassign, <strong class="jxr_keyword">boolean</strong> metaRow,
-<a class="jxr_linenumber" name="195" href="#195">195</a>       <strong class="jxr_keyword">boolean</strong> hdfs, <strong class="jxr_keyword">boolean</strong> regionInfoOnly, <strong class="jxr_keyword">int</strong> replicaId)
-<a class="jxr_linenumber" name="196" href="#196">196</a>           <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
-<a class="jxr_linenumber" name="197" href="#197">197</a>     LOG.info(<span class="jxr_string">"** Before delete:"</span>);
-<a class="jxr_linenumber" name="198" href="#198">198</a>     dumpMeta(htd.getTableName());
-<a class="jxr_linenumber" name="199" href="#199">199</a> 
-<a class="jxr_linenumber" name="200" href="#200">200</a>     List&lt;HRegionLocation&gt; locations;
-<a class="jxr_linenumber" name="201" href="#201">201</a>     <strong class="jxr_keyword">try</strong>(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {
-<a class="jxr_linenumber" name="202" href="#202">202</a>       locations = rl.getAllRegionLocations();
-<a class="jxr_linenumber" name="203" href="#203">203</a>     }
-<a class="jxr_linenumber" name="204" href="#204">204</a> 
-<a class="jxr_linenumber" name="205" href="#205">205</a>     <strong class="jxr_keyword">for</strong> (HRegionLocation location : locations) {
-<a class="jxr_linenumber" name="206" href="#206">206</a>       HRegionInfo hri = location.getRegionInfo();
-<a class="jxr_linenumber" name="207" href="#207">207</a>       ServerName hsa = location.getServerName();
-<a class="jxr_linenumber" name="208" href="#208">208</a>       <strong class="jxr_keyword">if</strong> (Bytes.compareTo(hri.getStartKey(), startKey) == 0
-<a class="jxr_linenumber" name="209" href="#209">209</a>           &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0
-<a class="jxr_linenumber" name="210" href="#210">210</a>           &amp;&amp; hri.getReplicaId() == replicaId) {
-<a class="jxr_linenumber" name="211" href="#211">211</a> 
-<a class="jxr_linenumber" name="212" href="#212">212</a>         LOG.info(<span class="jxr_string">"RegionName: "</span> +hri.getRegionNameAsString());
-<a class="jxr_linenumber" name="213" href="#213">213</a>         byte[] deleteRow = hri.getRegionName();
-<a class="jxr_linenumber" name="214" href="#214">214</a> 
-<a class="jxr_linenumber" name="215" href="#215">215</a>         <strong class="jxr_keyword">if</strong> (unassign) {
-<a class="jxr_linenumber" name="216" href="#216">216</a>           LOG.info(<span class="jxr_string">"Undeploying region "</span> + hri + <span class="jxr_string">" from server "</span> + hsa);
-<a class="jxr_linenumber" name="217" href="#217">217</a>           undeployRegion(connection, hsa, hri);
+<a class="jxr_linenumber" name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.assertEquals;
+<a class="jxr_linenumber" name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.junit.Assert.fail;
+<a class="jxr_linenumber" name="23" href="#23">23</a>  
+<a class="jxr_linenumber" name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
+<a class="jxr_linenumber" name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
+<a class="jxr_linenumber" name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> java.util.Collection;
+<a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
+<a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> java.util.List;
+<a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
+<a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> java.util.UUID;
+<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.CountDownLatch;
+<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ExecutorService;
+<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ScheduledThreadPoolExecutor;
+<a class="jxr_linenumber" name="34" href="#34">34</a>  
+<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
+<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
+<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.conf.Configuration;
+<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileStatus;
+<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileSystem;
+<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.Path;
+<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ClusterStatus;
+<a class="jxr_linenumber" name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseTestingUtility;
+<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HColumnDescriptor;
+<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
+<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionInfo;
+<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionLocation;
+<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
+<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ServerName;
+<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
+<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MetaTableAccessor;
+<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Admin;
+<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ClusterConnection;
+<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Connection;
+<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ConnectionFactory;
+<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Delete;
+<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.HConnection;
+<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Put;
+<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.RegionLocator;
+<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ResultScanner;
+<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
+<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Table;
+<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;
+<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;
+<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.coprocessor.ObserverContext;
+<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.RegionStates;
+<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.mob.MobFileName;
+<a class="jxr_linenumber" name="67" href="#67">67</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.mob.MobUtils;
+<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
+<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionFileSystem;
+<a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;
+<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;
+<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;
+<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;
+<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> org.apache.zookeeper.KeeperException;
+<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> org.junit.rules.TestName;
+<a class="jxr_linenumber" name="77" href="#77">77</a>  
+<a class="jxr_linenumber" name="78" href="#78">78</a>  <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="79" href="#79">79</a>  <em class="jxr_javadoccomment"> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.</em>
+<a class="jxr_linenumber" name="80" href="#80">80</a>  <em class="jxr_javadoccomment"> *</em>
+<a class="jxr_linenumber" name="81" href="#81">81</a>  <em class="jxr_javadoccomment"> * Actual tests are in :</em>
+<a class="jxr_linenumber" name="82" href="#82">82</a>  <em class="jxr_javadoccomment"> * TestHBaseFsckTwoRS</em>
+<a class="jxr_linenumber" name="83" href="#83">83</a>  <em class="jxr_javadoccomment"> * TestHBaseFsckOneRS</em>
+<a class="jxr_linenumber" name="84" href="#84">84</a>  <em class="jxr_javadoccomment"> * TestHBaseFsckMOB</em>
+<a class="jxr_linenumber" name="85" href="#85">85</a>  <em class="jxr_javadoccomment"> * TestHBaseFsckReplicas</em>
+<a class="jxr_linenumber" name="86" href="#86">86</a>  <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html">BaseTestHBaseFsck</a> {
+<a class="jxr_linenumber" name="88" href="#88">88</a>    <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> POOL_SIZE = 7;
+<a class="jxr_linenumber" name="89" href="#89">89</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(BaseTestHBaseFsck.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="90" href="#90">90</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> TEST_UTIL = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a>();
+<a class="jxr_linenumber" name="91" href="#91">91</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> Configuration conf = TEST_UTIL.getConfiguration();
+<a class="jxr_linenumber" name="92" href="#92">92</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> String FAM_STR = <span class="jxr_string">"fam"</span>;
+<a class="jxr_linenumber" name="93" href="#93">93</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[] FAM = Bytes.toBytes(FAM_STR);
+<a class="jxr_linenumber" name="94" href="#94">94</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> REGION_ONLINE_TIMEOUT = 800;
+<a class="jxr_linenumber" name="95" href="#95">95</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> RegionStates regionStates;
+<a class="jxr_linenumber" name="96" href="#96">96</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> ExecutorService tableExecutorService;
+<a class="jxr_linenumber" name="97" href="#97">97</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> ScheduledThreadPoolExecutor hbfsckExecutorService;
+<a class="jxr_linenumber" name="98" href="#98">98</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> ClusterConnection connection;
+<a class="jxr_linenumber" name="99" href="#99">99</a>    <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">static</strong> Admin admin;
+<a class="jxr_linenumber" name="100" href="#100">100</a> 
+<a class="jxr_linenumber" name="101" href="#101">101</a>   <em class="jxr_comment">// for the instance, reset every test run</em>
+<a class="jxr_linenumber" name="102" href="#102">102</a>   <strong class="jxr_keyword">protected</strong> Table tbl;
+<a class="jxr_linenumber" name="103" href="#103">103</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[][] SPLITS = <strong class="jxr_keyword">new</strong> byte[][] { Bytes.toBytes(<span class="jxr_string">"A"</span>),
+<a class="jxr_linenumber" name="104" href="#104">104</a>     Bytes.toBytes(<span class="jxr_string">"B"</span>), Bytes.toBytes(<span class="jxr_string">"C"</span>) };
+<a class="jxr_linenumber" name="105" href="#105">105</a>   <em class="jxr_comment">// one row per region.</em>
+<a class="jxr_linenumber" name="106" href="#106">106</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[][] ROWKEYS= <strong class="jxr_keyword">new</strong> byte[][] {
+<a class="jxr_linenumber" name="107" href="#107">107</a>     Bytes.toBytes(<span class="jxr_string">"00"</span>), Bytes.toBytes(<span class="jxr_string">"50"</span>), Bytes.toBytes(<span class="jxr_string">"A0"</span>), Bytes.toBytes(<span class="jxr_string">"A5"</span>),
+<a class="jxr_linenumber" name="108" href="#108">108</a>     Bytes.toBytes(<span class="jxr_string">"B0"</span>), Bytes.toBytes(<span class="jxr_string">"B5"</span>), Bytes.toBytes(<span class="jxr_string">"C0"</span>), Bytes.toBytes(<span class="jxr_string">"C5"</span>) };
+<a class="jxr_linenumber" name="109" href="#109">109</a> 
+<a class="jxr_linenumber" name="110" href="#110">110</a> 
+<a class="jxr_linenumber" name="111" href="#111">111</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="112" href="#112">112</a> <em class="jxr_javadoccomment">   * Create a new region in META.</em>
+<a class="jxr_linenumber" name="113" href="#113">113</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="114" href="#114">114</a>   <strong class="jxr_keyword">protected</strong> HRegionInfo createRegion(<strong class="jxr_keyword">final</strong> HTableDescriptor
+<a class="jxr_linenumber" name="115" href="#115">115</a>       htd, byte[] startKey, byte[] endKey)
+<a class="jxr_linenumber" name="116" href="#116">116</a>       <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="117" href="#117">117</a>     Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
+<a class="jxr_linenumber" name="118" href="#118">118</a>     HRegionInfo hri = <strong class="jxr_keyword">new</strong> HRegionInfo(htd.getTableName(), startKey, endKey);
+<a class="jxr_linenumber" name="119" href="#119">119</a>     MetaTableAccessor.addRegionToMeta(meta, hri);
+<a class="jxr_linenumber" name="120" href="#120">120</a>     meta.close();
+<a class="jxr_linenumber" name="121" href="#121">121</a>     <strong class="jxr_keyword">return</strong> hri;
+<a class="jxr_linenumber" name="122" href="#122">122</a>   }
+<a class="jxr_linenumber" name="123" href="#123">123</a> 
+<a class="jxr_linenumber" name="124" href="#124">124</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="125" href="#125">125</a> <em class="jxr_javadoccomment">   * Debugging method to dump the contents of meta.</em>
+<a class="jxr_linenumber" name="126" href="#126">126</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="127" href="#127">127</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> dumpMeta(TableName tableName) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="128" href="#128">128</a>     List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);
+<a class="jxr_linenumber" name="129" href="#129">129</a>     <strong class="jxr_keyword">for</strong> (byte[] row : metaRows) {
+<a class="jxr_linenumber" name="130" href="#130">130</a>       LOG.info(Bytes.toString(row));
+<a class="jxr_linenumber" name="131" href="#131">131</a>     }
+<a class="jxr_linenumber" name="132" href="#132">132</a>   }
+<a class="jxr_linenumber" name="133" href="#133">133</a> 
+<a class="jxr_linenumber" name="134" href="#134">134</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="135" href="#135">135</a> <em class="jxr_javadoccomment">   * This method is used to undeploy a region -- close it and attempt to</em>
+<a class="jxr_linenumber" name="136" href="#136">136</a> <em class="jxr_javadoccomment">   * remove its state from the Master.</em>
+<a class="jxr_linenumber" name="137" href="#137">137</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="138" href="#138">138</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> undeployRegion(Connection conn, ServerName sn,
+<a class="jxr_linenumber" name="139" href="#139">139</a>       HRegionInfo hri) <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="140" href="#140">140</a>     <strong class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="141" href="#141">141</a>       HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);
+<a class="jxr_linenumber" name="142" href="#142">142</a>       <strong class="jxr_keyword">if</strong> (!hri.isMetaTable()) {
+<a class="jxr_linenumber" name="143" href="#143">143</a>         admin.offline(hri.getRegionName());
+<a class="jxr_linenumber" name="144" href="#144">144</a>       }
+<a class="jxr_linenumber" name="145" href="#145">145</a>     } <strong class="jxr_keyword">catch</strong> (IOException ioe) {
+<a class="jxr_linenumber" name="146" href="#146">146</a>       LOG.warn(<span class="jxr_string">"Got exception when attempting to offline region "</span>
+<a class="jxr_linenumber" name="147" href="#147">147</a>           + Bytes.toString(hri.getRegionName()), ioe);
+<a class="jxr_linenumber" name="148" href="#148">148</a>     }
+<a class="jxr_linenumber" name="149" href="#149">149</a>   }
+<a class="jxr_linenumber" name="150" href="#150">150</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="151" href="#151">151</a> <em class="jxr_javadoccomment">   * Delete a region from assignments, meta, or completely from hdfs.</em>
+<a class="jxr_linenumber" name="152" href="#152">152</a> <em class="jxr_javadoccomment">   * @param unassign if true unassign region if assigned</em>
+<a class="jxr_linenumber" name="153" href="#153">153</a> <em class="jxr_javadoccomment">   * @param metaRow  if true remove region's row from META</em>
+<a class="jxr_linenumber" name="154" href="#154">154</a> <em class="jxr_javadoccomment">   * @param hdfs if true remove region's dir in HDFS</em>
+<a class="jxr_linenumber" name="155" href="#155">155</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="156" href="#156">156</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> deleteRegion(Configuration conf, <strong class="jxr_keyword">final</strong> HTableDescriptor htd,
+<a class="jxr_linenumber" name="157" href="#157">157</a>       byte[] startKey, byte[] endKey, <strong class="jxr_keyword">boolean</strong> unassign, <strong class="jxr_keyword">boolean</strong> metaRow,
+<a class="jxr_linenumber" name="158" href="#158">158</a>       <strong class="jxr_keyword">boolean</strong> hdfs) <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="159" href="#159">159</a>     deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,
+<a class="jxr_linenumber" name="160" href="#160">160</a>         HRegionInfo.DEFAULT_REPLICA_ID);
+<a class="jxr_linenumber" name="161" href="#161">161</a>   }
+<a class="jxr_linenumber" name="162" href="#162">162</a> 
+<a class="jxr_linenumber" name="163" href="#163">163</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="164" href="#164">164</a> <em class="jxr_javadoccomment">   * Delete a region from assignments, meta, or completely from hdfs.</em>
+<a class="jxr_linenumber" name="165" href="#165">165</a> <em class="jxr_javadoccomment">   * @param unassign if true unassign region if assigned</em>
+<a class="jxr_linenumber" name="166" href="#166">166</a> <em class="jxr_javadoccomment">   * @param metaRow  if true remove region's row from META</em>
+<a class="jxr_linenumber" name="167" href="#167">167</a> <em class="jxr_javadoccomment">   * @param hdfs if true remove region's dir in HDFS</em>
+<a class="jxr_linenumber" name="168" href="#168">168</a> <em class="jxr_javadoccomment">   * @param regionInfoOnly if true remove a region dir's .regioninfo file</em>
+<a class="jxr_linenumber" name="169" href="#169">169</a> <em class="jxr_javadoccomment">   * @param replicaId replica id</em>
+<a class="jxr_linenumber" name="170" href="#170">170</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="171" href="#171">171</a>   <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> deleteRegion(Configuration conf, <strong class="jxr_keyword">final</strong> HTableDescriptor htd,
+<a class="jxr_linenumber" name="172" href="#172">172</a>       byte[] startKey, byte[] endKey, <strong class="jxr_keyword">boolean</strong> unassign, <strong class="jxr_keyword">boolean</strong> metaRow,
+<a class="jxr_linenumber" name="173" href="#173">173</a>       <strong class="jxr_keyword">boolean</strong> hdfs, <strong class="jxr_keyword">boolean</strong> regionInfoOnly, <strong class="jxr_keyword">int</strong> replicaId)
+<a class="jxr_linenumber" name="174" href="#174">174</a>           <strong class="jxr_keyword">throws</strong> IOException, InterruptedException {
+<a class="jxr_linenumber" name="175" href="#175">175</a>     LOG.info(<span class="jxr_string">"** Before delete:"</span>);
+<a class="jxr_linenumber" name="176" href="#176">176</a>     dumpMeta(htd.getTableName());
+<a class="jxr_linenumber" name="177" href="#177">177</a> 
+<a class="jxr_linenumber" name="178" href="#178">178</a>     List&lt;HRegionLocation&gt; locations;
+<a class="jxr_linenumber" name="179" href="#179">179</a>     <strong class="jxr_keyword">try</strong>(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {
+<a class="jxr_linenumber" name="180" href="#180">180</a>       locations = rl.getAllRegionLocations();
+<a class="jxr_linenumber" name="181" href="#181">181</a>     }
+<a class="jxr_linenumber" name="182" href="#182">182</a> 
+<a class="jxr_linenumber" name="183" href="#183">183</a>     <strong class="jxr_keyword">for</strong> (HRegionLocation location : locations) {
+<a class="jxr_linenumber" name="184" href="#184">184</a>       HRegionInfo hri = location.getRegionInfo();
+<a class="jxr_linenumber" name="185" href="#185">185</a>       ServerName hsa = location.getServerName();
+<a class="jxr_linenumber" name="186" href="#186">186</a>       <strong class="jxr_keyword">if</strong> (Bytes.compareTo(hri.getStartKey(), startKey) == 0
+<a class="jxr_linenumber" name="187" href="#187">187</a>           &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0
+<a class="jxr_linenumber" name="188" href="#188">188</a>           &amp;&amp; hri.getReplicaId() == replicaId) {
+<a class="jxr_linenumber" name="189" href="#189">189</a> 
+<a class="jxr_linenumber" name="190" href="#190">190</a>         LOG.info(<span class="jxr_string">"RegionName: "</span> +hri.getRegionNameAsString());
+<a class="jxr_linenumber" name="191" href="#191">191</a>         byte[] deleteRow = hri.getRegionName();
+<a class="jxr_linenumber" name="192" href="#192">192</a> 
+<a class="jxr_linenumber" name="193" href="#193">193</a>         <strong class="jxr_keyword">if</strong> (unassign) {
+<a class="jxr_linenumber" name="194" href="#194">194</a>           LOG.info(<span class="jxr_string">"Undeploying region "</span> + hri + <span class="jxr_string">" from server "</span> + hsa);
+<a class="jxr_linenumber" name="195" href="#195">195</a>           undeployRegion(connection, hsa, hri);
+<a class="jxr_linenumber" name="196" href="#196">196</a>         }
+<a class="jxr_linenumber" name="197" href="#197">197</a> 
+<a class="jxr_linenumber" name="198" href="#198">198</a>         <strong class="jxr_keyword">if</strong> (regionInfoOnly) {
+<a class="jxr_linenumber" name="199" href="#199">199</a>           LOG.info(<span class="jxr_string">"deleting hdfs .regioninfo data: "</span> + hri.toString() + hsa.toString());
+<a class="jxr_linenumber" name="200" href="#200">200</a>           Path rootDir = FSUtils.getRootDir(conf);
+<a class="jxr_linenumber" name="201" href="#201">201</a>           FileSystem fs = rootDir.getFileSystem(conf);
+<a class="jxr_linenumber" name="202" href="#202">202</a>           Path p = <strong class="jxr_keyword">new</strong> Path(FSUtils.getTableDir(rootDir, htd.getTableName()),
+<a class="jxr_linenumber" name="203" href="#203">203</a>               hri.getEncodedName());
+<a class="jxr_linenumber" name="204" href="#204">204</a>           Path hriPath = <strong class="jxr_keyword">new</strong> Path(p, HRegionFileSystem.REGION_INFO_FILE);
+<a class="jxr_linenumber" name="205" href="#205">205</a>           fs.delete(hriPath, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="206" href="#206">206</a>         }
+<a class="jxr_linenumber" name="207" href="#207">207</a> 
+<a class="jxr_linenumber" name="208" href="#208">208</a>         <strong class="jxr_keyword">if</strong> (hdfs) {
+<a class="jxr_linenumber" name="209" href="#209">209</a>           LOG.info(<span class="jxr_string">"deleting hdfs data: "</span> + hri.toString() + hsa.toString());
+<a class="jxr_linenumber" name="210" href="#210">210</a>           Path rootDir = FSUtils.getRootDir(conf);
+<a class="jxr_linenumber" name="211" href="#211">211</a>           FileSystem fs = rootDir.getFileSystem(conf);
+<a class="jxr_linenumber" name="212" href="#212">212</a>           Path p = <strong class="jxr_keyword">new</strong> Path(FSUtils.getTableDir(rootDir, htd.getTableName()),
+<a class="jxr_linenumber" name="213" href="#213">213</a>               hri.getEncodedName());
+<a class="jxr_linenumber" name="214" href="#214">214</a>           HBaseFsck.debugLsr(conf, p);
+<a class="jxr_linenumber" name="215" href="#215">215</a>           <strong class="jxr_keyword">boolean</strong> success = fs.delete(p, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="216" href="#216">216</a>           LOG.info(<span class="jxr_string">"Deleted "</span> + p + <span class="jxr_string">" sucessfully? "</span> + success);
+<a class="jxr_linenumber" name="217" href="#217">217</a>           HBaseFsck.debugLsr(conf, p);
 <a class="jxr_linenumber" name="218" href="#218">218</a>         }
 <a class="jxr_linenumber" name="219" href="#219">219</a> 
-<a class="jxr_linenumber" name="220" href="#220">220</a>         <strong class="jxr_keyword">if</strong> (regionInfoOnly) {
-<a class="jxr_linenumber" name="221" href="#221">221</a>           LOG.info(<span class="jxr_string">"deleting hdfs .regioninfo data: "</span> + hri.toString() + hsa.toString());
-<a class="jxr_linenumber" name="222" href="#222">222</a>           Path rootDir = FSUtils.getRootDir(conf);
-<a class="jxr_linenumber" name="223" href="#223">223</a>           FileSystem fs = rootDir.getFileSystem(conf);
-<a class="jxr_linenumber" name="224" href="#224">224</a>           Path p = <strong class="jxr_keyword">new</strong> Path(FSUtils.getTableDir(rootDir, htd.getTableName()),
-<a class="jxr_linenumber" name="225" href="#225">225</a>               hri.getEncodedName());
-<a class="jxr_linenumber" name="226" href="#226">226</a>           Path hriPath = <strong class="jxr_keyword">new</strong> Path(p, HRegionFileSystem.REGION_INFO_FILE);
-<a class="jxr_linenumber" name="227" href="#227">227</a>           fs.delete(hriPath, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="228" href="#228">228</a>         }
+<a class="jxr_linenumber" name="220" href="#220">220</a>         <strong class="jxr_keyword">if</strong> (metaRow) {
+<a class="jxr_linenumber" name="221" href="#221">221</a>           <strong class="jxr_keyword">try</strong> (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {
+<a class="jxr_linenumber" name="222" href="#222">222</a>             Delete delete = <strong class="jxr_keyword">new</strong> Delete(deleteRow);
+<a class="jxr_linenumber" name="223" href="#223">223</a>             meta.delete(delete);
+<a class="jxr_linenumber" name="224" href="#224">224</a>           }
+<a class="jxr_linenumber" name="225" href="#225">225</a>         }
+<a class="jxr_linenumber" name="226" href="#226">226</a>       }
+<a class="jxr_linenumber" name="227" href="#227">227</a>       LOG.info(hri.toString() + hsa.toString());
+<a class="jxr_linenumber" name="228" href="#228">228</a>     }
 <a class="jxr_linenumber" name="229" href="#229">229</a> 
-<a class="jxr_linenumber" name="230" href="#230">230</a>         <strong class="jxr_keyword">if</strong> (hdfs) {
-<a class="jxr_linenumber" name="231" href="#231">231</a>           LOG.info(<span class="jxr_string">"deleting hdfs data: "</span> + hri.toString() + hsa.toString());
-<a class="jxr_linenumber" name="232" href="#232">232</a>           Path rootDir = FSUtils.getRootDir(conf);
-<a class="jxr_linenumber" name="233" href="#233">233</a>           FileSystem fs = rootDir.getFileSystem(conf);
-<a class="jxr_linenumber" name="234" href="#234">234</a>           Path p = <strong class="jxr_keyword">new</strong> Path(FSUtils.getTableDir(rootDir, htd.getTableName()),
-<a class="jxr_linenumber" name="235" href="#235">235</a>               hri.getEncodedName());
-<a class="jxr_linenumber" name="236" href="#236">236</a>           HBaseFsck.debugLsr(conf, p);
-<a class="jxr_linenumber" name="237" href="#237">237</a>           <strong class="jxr_keyword">boolean</strong> success = fs.delete(p, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="238" href="#238">238</a>           LOG.info(<span class="jxr_string">"Deleted "</span> + p + <span class="jxr_string">" sucessfully? "</span> + success);
-<a class="jxr_linenumber" name="239" href="#239">239</a>           HBaseFsck.debugLsr(conf, p);
-<a class="jxr_linenumber" name="240" href="#240">240</a>         }
-<a class="jxr_linenumber" name="241" href="#241">241</a> 
-<a class="jxr_linenumber" name="242" href="#242">242</a>         <strong class="jxr_keyword">if</strong> (metaRow) {
-<a class="jxr_linenumber" name="243" href="#243">243</a>           <strong class="jxr_keyword">try</strong> (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {
-<a class="jxr_linenumber" name="244" href="#244">244</a>             Delete delete = <strong class="jxr_keyword">new</strong> Delete(deleteRow);
-<a class="jxr_linenumber" name="245" href="#245">245</a>             meta.delete(delete);
-<a class="jxr_linenumber" name="246" href="#246">246</a>           }
-<a class="jxr_linenumber" name="247" href="#247">247</a>         }
-<a class="jxr_linenumber" name="248" href="#248">248</a>       }
-<a class="jxr_linenumber" name="249" href="#249">249</a>       LOG.info(hri.toString() + hsa.toString());
-<a class="jxr_linenumber" name="250" href="#250">250</a>     }
-<a class="jxr_linenumber" name="251" href="#251">251</a> 
-<a class="jxr_linenumber" name="252" href="#252">252</a>     TEST_UTIL.getMetaTableRows(htd.getTableName());
-<a class="jxr_linenumber" name="253" href="#253">253</a>     LOG.info(<span class="jxr_string">"*** After delete:"</span>);
-<a class="jxr_linenumber" name="254" href="#254">254</a>     dumpMeta(htd.getTableName());
-<a class="jxr_linenumber" name="255" href="#255">255</a>   }
-<a class="jxr_linenumber" name="256" href="#256">256</a> 
-<a class="jxr_linenumber" name="257" href="#257">257</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="258" href="#258">258</a> <em class="jxr_javadoccomment">   * Setup a clean table before we start mucking with it.</em>
-<a class="jxr_linenumber" name="259" href="#259">259</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="260" href="#260">260</a> <em class="jxr_javadoccomment">   * It will set tbl which needs to be closed after test</em>
-<a class="jxr_linenumber" name="261" href="#261">261</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="262" href="#262">262</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="263" href="#263">263</a> <em class="jxr_javadoccomment">   * @throws InterruptedException</em>
-<a class="jxr_linenumber" name="264" href="#264">264</a> <em class="jxr_javadoccomment">   * @throws KeeperException</em>
-<a class="jxr_linenumber" name="265" href="#265">265</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="266" href="#266">266</a>   <strong class="jxr_keyword">void</strong> setupTable(TableName tablename) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="267" href="#267">267</a>     setupTableWithRegionReplica(tablename, 1);
-<a class="jxr_linenumber" name="268" href="#268">268</a>   }
-<a class="jxr_linenumber" name="269" href="#269">269</a> 
-<a class="jxr_linenumber" name="270" href="#270">270</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="271" href="#271">271</a> <em class="jxr_javadoccomment">   * Setup a clean table with a certain region_replica count</em>
-<a class="jxr_linenumber" name="272" href="#272">272</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="273" href="#273">273</a> <em class="jxr_javadoccomment">   * It will set tbl which needs to be closed after test</em>
+<a class="jxr_linenumber" name="230" href="#230">230</a>     TEST_UTIL.getMetaTableRows(htd.getTableName());
+<a class="jxr_linenumber" name="231" href="#231">231</a>     LOG.info(<span class="jxr_string">"*** After delete:"</span>);
+<a class="jxr_linenumber" name="232" href="#232">232</a>     dumpMeta(htd.getTableName());
+<a class="jxr_linenumber" name="233" href="#233">233</a>   }
+<a class="jxr_linenumber" name="234" href="#234">234</a> 
+<a class="jxr_linenumber" name="235" href="#235">235</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="236" href="#236">236</a> <em class="jxr_javadoccomment">   * Setup a clean table before we start mucking with it.</em>
+<a class="jxr_linenumber" name="237" href="#237">237</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="238" href="#238">238</a> <em class="jxr_javadoccomment">   * It will set tbl which needs to be closed after test</em>
+<a class="jxr_linenumber" name="239" href="#239">239</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="240" href="#240">240</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<a class="jxr_linenumber" name="241" href="#241">241</a> <em class="jxr_javadoccomment">   * @throws InterruptedException</em>
+<a class="jxr_linenumber" name="242" href="#242">242</a> <em class="jxr_javadoccomment">   * @throws KeeperException</em>
+<a class="jxr_linenumber" name="243" href="#243">243</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="244" href="#244">244</a>   <strong class="jxr_keyword">void</strong> setupTable(TableName tablename) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="245" href="#245">245</a>     setupTableWithRegionReplica(tablename, 1);
+<a class="jxr_linenumber" name="246" href="#246">246</a>   }
+<a class="jxr_linenumber" name="247" href="#247">247</a> 
+<a class="jxr_linenumber" name="248" href="#248">248</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="249" href="#249">249</a> <em class="jxr_javadoccomment">   * Setup a clean table with a certain region_replica count</em>
+<a class="jxr_linenumber" name="250" href="#250">250</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="251" href="#251">251</a> <em class="jxr_javadoccomment">   * It will set tbl which needs to be closed after test</em>
+<a class="jxr_linenumber" name="252" href="#252">252</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="253" href="#253">253</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
+<a class="jxr_linenumber" name="254" href="#254">254</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="255" href="#255">255</a>   <strong class="jxr_keyword">void</strong> setupTableWithRegionReplica(TableName tablename, <strong class="jxr_keyword">int</strong> replicaCount) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="256" href="#256">256</a>     HTableDescriptor desc = <strong class="jxr_keyword">new</strong> HTableDescriptor(tablename);
+<a class="jxr_linenumber" name="257" href="#257">257</a>     desc.setRegionReplication(replicaCount);
+<a class="jxr_linenumber" name="258" href="#258">258</a>     HColumnDescriptor hcd = <strong class="jxr_keyword">new</strong> HColumnDescriptor(Bytes.toString(FAM));
+<a class="jxr_linenumber" name="259" href="#259">259</a>     desc.addFamily(hcd); <em class="jxr_comment">// If a table has no CF's it doesn't get checked</em>
+<a class="jxr_linenumber" name="260" href="#260">260</a>     createTable(TEST_UTIL, desc, SPLITS);
+<a class="jxr_linenumber" name="261" href="#261">261</a> 
+<a class="jxr_linenumber" name="262" href="#262">262</a>     tbl = connection.getTable(tablename, tableExecutorService);
+<a class="jxr_linenumber" name="263" href="#263">263</a>     List&lt;Put&gt; puts = <strong class="jxr_keyword">new</strong> ArrayList&lt;Put&gt;();
+<a class="jxr_linenumber" name="264" href="#264">264</a>     <strong class="jxr_keyword">for</strong> (byte[] row : ROWKEYS) {
+<a class="jxr_linenumber" name="265" href="#265">265</a>       Put p = <strong class="jxr_keyword">new</strong> Put(row);
+<a class="jxr_linenumber" name="266" href="#266">266</a>       p.addColumn(FAM, Bytes.toBytes(<span class="jxr_string">"val"</span>), row);
+<a class="jxr_linenumber" name="267" href="#267">267</a>       puts.add(p);
+<a class="jxr_linenumber" name="268" href="#268">268</a>     }
+<a class="jxr_linenumber" name="269" href="#269">269</a>     tbl.put(puts);
+<a class="jxr_linenumber" name="270" href="#270">270</a>   }
+<a class="jxr_linenumber" name="271" href="#271">271</a> 
+<a class="jxr_linenumber" name="272" href="#272">272</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="273" href="#273">273</a> <em class="jxr_javadoccomment">   * Setup a clean table with a mob-enabled column.</em>
 <a class="jxr_linenumber" name="274" href="#274">274</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="275" href="#275">275</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
-<a class="jxr_linenumber" name="276" href="#276">276</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="277" href="#277">277</a>   <strong class="jxr_keyword">void</strong> setupTableWithRegionReplica(TableName tablename, <strong class="jxr_keyword">int</strong> replicaCount) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="278" href="#278">278</a>     HTableDescriptor desc = <strong class="jxr_keyword">new</strong> HTableDescriptor(tablename);
-<a class="jxr_linenumber" name="279" href="#279">279</a>     desc.setRegionReplication(replicaCount);
+<a class="jxr_linenumber" name="275" href="#275">275</a> <em class="jxr_javadoccomment">   * @param tablename The name of a table to be created.</em>
+<a class="jxr_linenumber" name="276" href="#276">276</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
+<a class="jxr_linenumber" name="277" href="#277">277</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="278" href="#278">278</a>   <strong class="jxr_keyword">void</strong> setupMobTable(TableName tablename) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="279" href="#279">279</a>     HTableDescriptor desc = <strong class="jxr_keyword">new</strong> HTableDescriptor(tablename);
 <a class="jxr_linenumber" name="280" href="#280">280</a>     HColumnDescriptor hcd = <strong class="jxr_keyword">new</strong> HColumnDescriptor(Bytes.toString(FAM));
-<a class="jxr_linenumber" name="281" href="#281">281</a>     desc.addFamily(hcd); <em class="jxr_comment">// If a table has no CF's it doesn't get checked</em>
-<a class="jxr_linenumber" name="282" href="#282">282</a>     createTable(TEST_UTIL, desc, SPLITS);
-<a class="jxr_linenumber" name="283" href="#283">283</a> 
-<a class="jxr_linenumber" name="284" href="#284">284</a>     tbl = connection.getTable(tablename, tableExecutorService);
-<a class="jxr_linenumber" name="285" href="#285">285</a>     List&lt;Put&gt; puts = <strong class="jxr_keyword">new</strong> ArrayList&lt;Put&gt;();
-<a class="jxr_linenumber" name="286" href="#286">286</a>     <strong class="jxr_keyword">for</strong> (byte[] row : ROWKEYS) {
-<a class="jxr_linenumber" name="287" href="#287">287</a>       Put p = <strong class="jxr_keyword">new</strong> Put(row);
-<a class="jxr_linenumber" name="288" href="#288">288</a>       p.addColumn(FAM, Bytes.toBytes(<span class="jxr_string">"val"</span>), row);
-<a class="jxr_linenumber" name="289" href="#289">289</a>       puts.add(p);
-<a class="jxr_linenumber" name="290" href="#290">290</a>     }
-<a class="jxr_linenumber" name="291" href="#291">291</a>     tbl.put(puts);
-<a class="jxr_linenumber" name="292" href="#292">292</a>   }
-<a class="jxr_linenumber" name="293" href="#293">293</a> 
-<a class="jxr_linenumber" name="294" href="#294">294</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="295" href="#295">295</a> <em class="jxr_javadoccomment">   * Setup a clean table with a mob-enabled column.</em>
-<a class="jxr_linenumber" name="296" href="#296">296</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="297" href="#297">297</a> <em class="jxr_javadoccomment">   * @param tablename The name of a table to be created.</em>
-<a class="jxr_linenumber" name="298" href="#298">298</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
-<a class="jxr_linenumber" name="299" href="#299">299</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="300" href="#300">300</a>   <strong class="jxr_keyword">void</strong> setupMobTable(TableName tablename) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="301" href="#301">301</a>     HTableDescriptor desc = <strong class="jxr_keyword">new</strong> HTableDescriptor(tablename);
-<a class="jxr_linenumber" name="302" href="#302">302</a>     HColumnDescriptor hcd = <strong class="jxr_keyword">new</strong> HColumnDescriptor(Bytes.toString(FAM));
-<a class="jxr_linenumber" name="303" href="#303">303</a>     hcd.setMobEnabled(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="304" href="#304">304</a>     hcd.setMobThreshold(0);
-<a class="jxr_linenumber" name="305" href="#305">305</a>     desc.addFamily(hcd); <em class="jxr_comment">// If a table has no CF's it doesn't get checked</em>
-<a class="jxr_linenumber" name="306" href="#306">306</a>     createTable(TEST_UTIL, desc, SPLITS);
-<a class="jxr_linenumber" name="307" href="#307">307</a> 
-<a class="jxr_linenumber" name="308" href="#308">308</a>     tbl = connection.getTable(tablename, tableExecutorService);
-<a class="jxr_linenumber" name="309" href="#309">309</a>     List&lt;Put&gt; puts = <strong class="jxr_keyword">new</strong> ArrayList&lt;Put&gt;();
-<a class="jxr_linenumber" name="310" href="#310">310</a>     <strong class="jxr_keyword">for</strong> (byte[] row : ROWKEYS) {
-<a class="jxr_linenumber" name="311" href="#311">311</a>       Put p = <strong class="jxr_keyword">new</strong> Put(row);
-<a class="jxr_linenumber" name="312" href="#312">312</a>       p.addColumn(FAM, Bytes.toBytes(<span class="jxr_string">"val"</span>), row);
-<a class="jxr_linenumber" name="313" href="#313">313</a>       puts.add(p);
-<a class="jxr_linenumber" name="314" href="#314">314</a>     }
-<a class="jxr_linenumber" name="315" href="#315">315</a>     tbl.put(puts);
-<a class="jxr_linenumber" name="316" href="#316">316</a>   }
-<a class="jxr_linenumber" name="317" href="#317">317</a> 
-<a class="jxr_linenumber" name="318" href="#318">318</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="319" href="#319">319</a> <em class="jxr_javadoccomment">   * Counts the number of row to verify data loss or non-dataloss.</em>
-<a class="jxr_linenumber" name="320" href="#320">320</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="321" href="#321">321</a>   <strong class="jxr_keyword">int</strong> countRows() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="322" href="#322">322</a>      Scan s = <strong class="jxr_keyword">new</strong> Scan();
-<a class="jxr_linenumber" name="323" href="#323">323</a>      ResultScanner rs = tbl.getScanner(s);
-<a class="jxr_linenumber" name="324" href="#324">324</a>      <strong class="jxr_keyword">int</strong> i = 0;
-<a class="jxr_linenumber" name="325" href="#325">325</a>      <strong class="jxr_keyword">while</strong>(rs.next() !=<strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="326" href="#326">326</a>        i++;
-<a class="jxr_linenumber" name="327" href="#327">327</a>      }
-<a class="jxr_linenumber" name="328" href="#328">328</a>      <strong class="jxr_keyword">return</strong> i;
-<a class="jxr_linenumber" name="329" href="#329">329</a>   }
-<a class="jxr_linenumber" name="330" href="#330">330</a> 
-<a class="jxr_linenumber" name="331" href="#331">331</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="332" href="#332">332</a> <em class="jxr_javadoccomment">   * delete table in preparation for next test</em>
-<a class="jxr_linenumber" name="333" href="#333">333</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="334" href="#334">334</a> <em class="jxr_javadoccomment">   * @param tablename</em>
-<a class="jxr_linenumber" name="335" href="#335">335</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="336" href="#336">336</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="337" href="#337">337</a>   <strong class="jxr_keyword">void</strong> cleanupTable(TableName tablename) <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="338" href="#338">338</a>     <strong class="jxr_keyword">if</strong> (tbl != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="339" href="#339">339</a>       tbl.close();
-<a class="jxr_linenumber" name="340" href="#340">340</a>       tbl = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="341" href="#341">341</a>     }
-<a class="jxr_linenumber" name="342" href="#342">342</a> 
-<a class="jxr_linenumber" name="343" href="#343">343</a>     ((ClusterConnection) connection).clearRegionCache();
-<a class="jxr_linenumber" name="344" href="#344">344</a>     deleteTable(TEST_UTIL, tablename);
+<a class="jxr_linenumber" name="281" href="#281">281</a>     hcd.setMobEnabled(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="282" href="#282">282</a>     hcd.setMobThreshold(0);
+<a class="jxr_linenumber" name="283" href="#283">283</a>     desc.addFamily(hcd); <em class="jxr_comment">// If a table has no CF's it doesn't get checked</em>
+<a class="jxr_linenumber" name="284" href="#284">284</a>     createTable(TEST_UTIL, desc, SPLITS);
+<a class="jxr_linenumber" name="285" href="#285">285</a> 
+<a class="jxr_linenumber" name="286" href="#286">286</a>     tbl = connection.getTable(tablename, tableExecutorService);
+<a class="jxr_linenumber" name="287" href="#287">287</a>     List&lt;Put&gt; puts = <strong class="jxr_keyword">new</strong> ArrayList&lt;Put&gt;();
+<a class="jxr_linenumber" name="288" href="#288">288</a>     <strong class="jxr_keyword">for</strong> (byte[] row : ROWKEYS) {
+<a class="jxr_linenumber" name="289" href="#289">289</a>       Put p = <strong class="jxr_keyword">new</strong> Put(row);
+<a class="jxr_linenumber" name="290" href="#290">290</a>       p.addColumn(FAM, Bytes.toBytes(<span class="jxr_string">"val"</span>), row);
+<a class="jxr_linenumber" name="291" href="#291">291</a>       puts.add(p);
+<a class="jxr_linenumber" name="292" href="#292">292</a>     }
+<a class="jxr_linenumber" name="293" href="#293">293</a>     tbl.put(puts);
+<a class="jxr_linenumber" name="294" href="#294">294</a>   }
+<a class="jxr_linenumber" name="295" href="#295">295</a> 
+<a class="jxr_linenumber" name="296" href="#296">296</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="297" href="#297">297</a> <em class="jxr_javadoccomment">   * Counts the number of row to verify data loss or non-dataloss.</em>
+<a class="jxr_linenumber" name="298" href="#298">298</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="299" href="#299">299</a>   <strong class="jxr_keyword">int</strong> countRows() <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="300" href="#300">300</a>      Scan s = <strong class="jxr_keyword">new</strong> Scan();
+<a class="jxr_linenumber" name="301" href="#301">301</a>      ResultScanner rs = tbl.getScanner(s);
+<a class="jxr_linenumber" name="302" href="#302">302</a>      <strong class="jxr_keyword">int</strong> i = 0;
+<a class="jxr_linenumber" name="303" href="#303">303</a>      <strong class="jxr_keyword">while</strong>(rs.next() !=<strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="304" href="#304">304</a>        i++;
+<a class="jxr_linenumber" name="305" href="#305">305</a>      }
+<a class="jxr_linenumber" name="306" href="#306">306</a>      <strong class="jxr_keyword">return</strong> i;
+<a class="jxr_linenumber" name="307" href="#307">307</a>   }
+<a class="jxr_linenumber" name="308" href="#308">308</a> 
+<a class="jxr_linenumber" name="309" href="#309">309</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="310" href="#310">310</a> <em class="jxr_javadoccomment">   * delete table in preparation for next test</em>
+<a class="jxr_linenumber" name="311" href="#311">311</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="312" href="#312">312</a> <em class="jxr_javadoccomment">   * @param tablename</em>
+<a class="jxr_linenumber" name="313" href="#313">313</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
+<a class="jxr_linenumber" name="314" href="#314">314</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="315" href="#315">315</a>   <strong class="jxr_keyword">void</strong> cleanupTable(TableName tablename) <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="316" href="#316">316</a>     <strong class="jxr_keyword">if</strong> (tbl != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="317" href="#317">317</a>       tbl.close();
+<a class="jxr_linenumber" name="318" href="#318">318</a>       tbl = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="319" href="#319">319</a>     }
+<a class="jxr_linenumber" name="320" href="#320">320</a> 
+<a class="jxr_linenumber" name="321" href="#321">321</a>     ((ClusterConnection) connection).clearRegionCache();
+<a class="jxr_linenumber" name="322" href="#322">322</a>     deleteTable(TEST_UTIL, tablename);
+<a class="jxr_linenumber" name="323" href="#323">323</a>   }
+<a class="jxr_linenumber" name="324" href="#324">324</a> 
+<a class="jxr_linenumber" name="325" href="#325">325</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="326" href="#326">326</a> <em class="jxr_javadoccomment">   * Get region info from local cluster.</em>
+<a class="jxr_linenumber" name="327" href="#327">327</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="328" href="#328">328</a>   Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(<strong class="jxr_keyword">final</strong> Admin admin) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="329" href="#329">329</a>     ClusterStatus status = admin.getClusterStatus();
+<a class="jxr_linenumber" name="330" href="#330">330</a>     Collection&lt;ServerName&gt; regionServers = status.getServers();
+<a class="jxr_linenumber" name="331" href="#331">331</a>     Map&lt;ServerName, List&lt;String&gt;&gt; mm =
+<a class="jxr_linenumber" name="332" href="#332">332</a>         <strong class="jxr_keyword">new</strong> HashMap&lt;ServerName, List&lt;String&gt;&gt;();
+<a class="jxr_linenumber" name="333" href="#333">333</a>     <strong class="jxr_keyword">for</strong> (ServerName hsi : regionServers) {
+<a class="jxr_linenumber" name="334" href="#334">334</a>       AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);
+<a class="jxr_linenumber" name="335" href="#335">335</a> 
+<a class="jxr_linenumber" name="336" href="#336">336</a>       <em class="jxr_comment">// list all online regions from this region server</em>
+<a class="jxr_linenumber" name="337" href="#337">337</a>       List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);
+<a class="jxr_linenumber" name="338" href="#338">338</a>       List&lt;String&gt; regionNames = <strong class="jxr_keyword">new</strong> ArrayList&lt;String&gt;();
+<a class="jxr_linenumber" name="339" href="#339">339</a>       <strong class="jxr_keyword">for</strong> (HRegionInfo hri : regions) {
+<a class="jxr_linenumber" name="340" href="#340">340</a>         regionNames.add(hri.getRegionNameAsString());
+<a class="jxr_linenumber" name="341" href="#341">341</a>       }
+<a class="jxr_linenumber" name="342" href="#342">342</a>       mm.put(hsi, regionNames);
+<a class="jxr_linenumber" name="343" href="#343">343</a>     }
+<a class="jxr_linenumber" name="344" href="#344">344</a>     <strong class="jxr_keyword">return</strong> mm;
 <a class="jxr_linenumber" name="345" href="#345">345</a>   }
 <a class="jxr_linenumber" name="346" href="#346">346</a> 
 <a class="jxr_linenumber" name="347" href="#347">347</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">   * Get region info from local cluster.</em>
+<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">   * Returns the HSI a region info is on.</em>
 <a class="jxr_linenumber" name="349" href="#349">349</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="350" href="#350">350</a>   Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(<strong class="jxr_keyword">final</strong> Admin admin) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="351" href="#351">351</a>     ClusterStatus status = admin.getClusterStatus();
-<a class="jxr_linenumber" name="352" href="#352">352</a>     Collection&lt;ServerName&gt; regionServers = status.getServers();
-<a class="jxr_linenumber" name="353" href="#353">353</a>     Map&lt;ServerName, List&lt;String&gt;&gt; mm =
-<a class="jxr_linenumber" name="354" href="#354">354</a>         <strong class="jxr_keyword">new</strong> HashMap&lt;ServerName, List&lt;String&gt;&gt;();
-<a class="jxr_linenumber" name="355" href="#355">355</a>     <strong class="jxr_keyword">for</strong> (ServerName hsi : regionServers) {
-<a class="jxr_linenumber" name="356" href="#356">356</a>       AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);
-<a class="jxr_linenumber" name="357" href="#357">357</a> 
-<a class="jxr_linenumber" name="358" href="#358">358</a>       <em class="jxr_comment">// list all online regions from this region server</em>
-<a class="jxr_linenumber" name="359" href="#359">359</a>       List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);
-<a class="jxr_linenumber" name="360" href="#360">360</a>       List&lt;String&gt; regionNames = <strong class="jxr_keyword">new</strong> ArrayList&lt;String&gt;();
-<a class="jxr_linenumber" name="361" href="#361">361</a>       <strong class="jxr_keyword">for</strong> (HRegionInfo hri : regions) {
-<a class="jxr_linenumber" name="362" href="#362">362</a>         regionNames.add(hri.getRegionNameAsString());
-<a class="jxr_linenumber" name="363" href="#363">363</a>       }
-<a class="jxr_linenumber" name="364" href="#364">364</a>       mm.put(hsi, regionNames);
-<a class="jxr_linenumber" name="365" href="#365">365</a>     }
-<a class="jxr_linenumber" name="366" href="#366">366</a>     <strong class="jxr_keyword">return</strong> mm;
-<a class="jxr_linenumber" name="367" href="#367">367</a>   }
-<a class="jxr_linenumber" name="368" href="#368">368</a> 
-<a class="jxr_linenumber" name="369" href="#369">369</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="370" href="#370">370</a> <em class="jxr_javadoccomment">   * Returns the HSI a region info is on.</em>
-<a class="jxr_linenumber" name="371" href="#371">371</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="372" href="#372">372</a>   ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {
-<a class="jxr_linenumber" name="373" href="#373">373</a>     <strong class="jxr_keyword">for</strong> (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {
-<a class="jxr_linenumber" name="374" href="#374">374</a>       <strong class="jxr_keyword">if</strong> (e.getValue().contains(hri.getRegionNameAsString())) {
-<a class="jxr_linenumber" name="375" href="#375">375</a>         <strong class="jxr_keyword">return</strong> e.getKey();
-<a class="jxr_linenumber" name="376" href="#376">376</a>       }
-<a class="jxr_linenumber" name="377" href="#377">377</a>     }
-<a class="jxr_linenumber" name="378" href="#378">378</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="379" href="#379">379</a>   }
+<a class="jxr_linenumber" name="350" href="#350">350</a>   ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {
+<a class="jxr_linenumber" name="351" href="#351">351</a>     <strong class="jxr_keyword">for</strong> (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {
+<a class="jxr_linenumber" name="352" href="#352">352</a>       <strong class="jxr_keyword">if</strong> (e.getValue().contains(hri.getRegionNameAsString())) {
+<a class="jxr_linenumber" name="353" href="#353">353</a>         <strong class="jxr_keyword">return</strong> e.getKey();
+<a class="jxr_linenumber" name="354" href="#354">354</a>       }
+<a class="jxr_linenumber" name="355" href="#355">355</a>     }
+<a class="jxr_linenumber" name="356" href="#356">356</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="357" href="#357">357</a>   }
+<a class="jxr_linenumber" name="358" href="#358">358</a> 
+<a class="jxr_linenumber" name="359" href="#359">359</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> deleteTableDir(TableName table) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="360" href="#360">360</a>     Path rootDir = FSUtils.getRootDir(conf);
+<a class="jxr_linenumber" name="361" href="#361">361</a>     FileSystem fs = rootDir.getFileSystem(conf);
+<a class="jxr_linenumber" name="362" href="#362">362</a>     Path p = FSUtils.getTableDir(rootDir, table);
+<a class="jxr_linenumber" name="363" href="#363">363</a>     HBaseFsck.debugLsr(conf, p);
+<a class="jxr_linenumber" name="364" href="#364">364</a>     <strong class="jxr_keyword">boolean</strong> success = fs.delete(p, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linen

<TRUNCATED>

[12/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
index e760e81..063701f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html
@@ -26,937 +26,636 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.util;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertErrors;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.assertNoErrors;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.doFsck;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import static org.junit.Assert.assertEquals;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import static org.junit.Assert.assertFalse;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import static org.junit.Assert.assertNotEquals;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import static org.junit.Assert.assertNotNull;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import static org.junit.Assert.assertTrue;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import static org.junit.Assert.fail;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.io.IOException;<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.Collection;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.HashMap;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Map;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.UUID;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.CountDownLatch;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.ExecutorService;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.commons.logging.Log;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.LogFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileStatus;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HConstants;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.ServerName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.TableName;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.HBaseAdmin;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Put;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Table;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.master.AssignmentManager;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.master.RegionState;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.mob.MobFileName;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.mob.MobUtils;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionFactory;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.SplitTransactionImpl;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.zookeeper.KeeperException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.junit.Assert;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.junit.Before;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.junit.Ignore;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.junit.Test;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.junit.rules.TestName;<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> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.<a name="line.101"></a>
-<span class="sourceLineNo">102</span> *<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * Actual tests are in :<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * TestHBaseFsckTwoRS<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * TestHBaseFsckOneRS<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * TestHBaseFsckMOB<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * TestHBaseFsckReplicas<a name="line.107"></a>
-<span class="sourceLineNo">108</span> */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>public class BaseTestHBaseFsck {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  static final int POOL_SIZE = 7;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  protected static final Log LOG = LogFactory.getLog(BaseTestHBaseFsck.class);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  protected final static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  protected final static String FAM_STR = "fam";<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  protected final static byte[] FAM = Bytes.toBytes(FAM_STR);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  protected final static int REGION_ONLINE_TIMEOUT = 800;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  protected static RegionStates regionStates;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  protected static ExecutorService tableExecutorService;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  protected static ScheduledThreadPoolExecutor hbfsckExecutorService;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  protected static ClusterConnection connection;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  protected static Admin admin;<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  // for the instance, reset every test run<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  protected Table tbl;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  protected final static byte[][] SPLITS = new byte[][] { Bytes.toBytes("A"),<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Bytes.toBytes("B"), Bytes.toBytes("C") };<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  // one row per region.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  protected final static byte[][] ROWKEYS= new byte[][] {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    Bytes.toBytes("00"), Bytes.toBytes("50"), Bytes.toBytes("A0"), Bytes.toBytes("A5"),<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Bytes.toBytes("B0"), Bytes.toBytes("B5"), Bytes.toBytes("C0"), Bytes.toBytes("C5") };<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>   * Create a new region in META.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  protected HRegionInfo createRegion(final HTableDescriptor<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      htd, byte[] startKey, byte[] endKey)<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(), startKey, endKey);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    MetaTableAccessor.addRegionToMeta(meta, hri);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    meta.close();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return hri;<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>   * Debugging method to dump the contents of meta.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   */<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  protected void dumpMeta(TableName tableName) throws IOException {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    for (byte[] row : metaRows) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      LOG.info(Bytes.toString(row));<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>  /**<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * This method is used to undeploy a region -- close it and attempt to<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * remove its state from the Master.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   */<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  protected void undeployRegion(Connection conn, ServerName sn,<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      HRegionInfo hri) throws IOException, InterruptedException {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (!hri.isMetaTable()) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        admin.offline(hri.getRegionName());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      }<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    } catch (IOException ioe) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      LOG.warn("Got exception when attempting to offline region "<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          + Bytes.toString(hri.getRegionName()), ioe);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param unassign if true unassign region if assigned<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param metaRow  if true remove region's row from META<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      boolean hdfs) throws IOException, InterruptedException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  }<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @param unassign if true unassign region if assigned<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param metaRow  if true remove region's row from META<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param regionInfoOnly if true remove a region dir's .regioninfo file<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param replicaId replica id<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      boolean hdfs, boolean regionInfoOnly, int replicaId)<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          throws IOException, InterruptedException {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    LOG.info("** Before delete:");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    dumpMeta(htd.getTableName());<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    List&lt;HRegionLocation&gt; locations;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    try(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      locations = rl.getAllRegionLocations();<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>    for (HRegionLocation location : locations) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      HRegionInfo hri = location.getRegionInfo();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      ServerName hsa = location.getServerName();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (Bytes.compareTo(hri.getStartKey(), startKey) == 0<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          &amp;&amp; hri.getReplicaId() == replicaId) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>        LOG.info("RegionName: " +hri.getRegionNameAsString());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        byte[] deleteRow = hri.getRegionName();<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (unassign) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.info("Undeploying region " + hri + " from server " + hsa);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          undeployRegion(connection, hsa, hri);<a name="line.217"></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.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Collection;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.UUID;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.CountDownLatch;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.ExecutorService;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.ScheduledThreadPoolExecutor;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.commons.logging.Log;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.commons.logging.LogFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.conf.Configuration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileStatus;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileSystem;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.Path;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ClusterStatus;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.ClusterConnection;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.HConnection;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.Put;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Table;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.coprocessor.BaseMasterObserver;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.master.RegionStates;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.mob.MobFileName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.mob.MobUtils;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.HRegionFileSystem;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.HBaseFsck.TableInfo;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.zookeeper.KeeperException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.junit.rules.TestName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>/**<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * This is the base class for  HBaseFsck's ability to detect reasons for inconsistent tables.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Actual tests are in :<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * TestHBaseFsckTwoRS<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * TestHBaseFsckOneRS<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * TestHBaseFsckMOB<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * TestHBaseFsckReplicas<a name="line.85"></a>
+<span class="sourceLineNo">086</span> */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>public class BaseTestHBaseFsck {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  static final int POOL_SIZE = 7;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected static final Log LOG = LogFactory.getLog(BaseTestHBaseFsck.class);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  protected final static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected final static String FAM_STR = "fam";<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  protected final static byte[] FAM = Bytes.toBytes(FAM_STR);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  protected final static int REGION_ONLINE_TIMEOUT = 800;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  protected static RegionStates regionStates;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  protected static ExecutorService tableExecutorService;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected static ScheduledThreadPoolExecutor hbfsckExecutorService;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  protected static ClusterConnection connection;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected static Admin admin;<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  // for the instance, reset every test run<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  protected Table tbl;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  protected final static byte[][] SPLITS = new byte[][] { Bytes.toBytes("A"),<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    Bytes.toBytes("B"), Bytes.toBytes("C") };<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  // one row per region.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected final static byte[][] ROWKEYS= new byte[][] {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    Bytes.toBytes("00"), Bytes.toBytes("50"), Bytes.toBytes("A0"), Bytes.toBytes("A5"),<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    Bytes.toBytes("B0"), Bytes.toBytes("B5"), Bytes.toBytes("C0"), Bytes.toBytes("C5") };<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>  /**<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * Create a new region in META.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  protected HRegionInfo createRegion(final HTableDescriptor<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      htd, byte[] startKey, byte[] endKey)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    HRegionInfo hri = new HRegionInfo(htd.getTableName(), startKey, endKey);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    MetaTableAccessor.addRegionToMeta(meta, hri);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    meta.close();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return hri;<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>   * Debugging method to dump the contents of meta.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   */<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  protected void dumpMeta(TableName tableName) throws IOException {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    List&lt;byte[]&gt; metaRows = TEST_UTIL.getMetaTableRows(tableName);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    for (byte[] row : metaRows) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      LOG.info(Bytes.toString(row));<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>  /**<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * This method is used to undeploy a region -- close it and attempt to<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * remove its state from the Master.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  protected void undeployRegion(Connection conn, ServerName sn,<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      HRegionInfo hri) throws IOException, InterruptedException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    try {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      HBaseFsckRepair.closeRegionSilentlyAndWait((HConnection) conn, sn, hri);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      if (!hri.isMetaTable()) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        admin.offline(hri.getRegionName());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    } catch (IOException ioe) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      LOG.warn("Got exception when attempting to offline region "<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          + Bytes.toString(hri.getRegionName()), ioe);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * @param unassign if true unassign region if assigned<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param metaRow  if true remove region's row from META<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      boolean hdfs) throws IOException, InterruptedException {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    deleteRegion(conf, htd, startKey, endKey, unassign, metaRow, hdfs, false,<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        HRegionInfo.DEFAULT_REPLICA_ID);<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>   * Delete a region from assignments, meta, or completely from hdfs.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param unassign if true unassign region if assigned<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param metaRow  if true remove region's row from META<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param hdfs if true remove region's dir in HDFS<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @param regionInfoOnly if true remove a region dir's .regioninfo file<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @param replicaId replica id<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  protected void deleteRegion(Configuration conf, final HTableDescriptor htd,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      byte[] startKey, byte[] endKey, boolean unassign, boolean metaRow,<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      boolean hdfs, boolean regionInfoOnly, int replicaId)<a name="line.173"></a>
+<span class="sourceLineNo">174</span>          throws IOException, InterruptedException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    LOG.info("** Before delete:");<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    dumpMeta(htd.getTableName());<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    List&lt;HRegionLocation&gt; locations;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    try(RegionLocator rl = connection.getRegionLocator(tbl.getName())) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      locations = rl.getAllRegionLocations();<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>    for (HRegionLocation location : locations) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      HRegionInfo hri = location.getRegionInfo();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      ServerName hsa = location.getServerName();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      if (Bytes.compareTo(hri.getStartKey(), startKey) == 0<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          &amp;&amp; Bytes.compareTo(hri.getEndKey(), endKey) == 0<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          &amp;&amp; hri.getReplicaId() == replicaId) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span>        LOG.info("RegionName: " +hri.getRegionNameAsString());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        byte[] deleteRow = hri.getRegionName();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>        if (unassign) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          LOG.info("Undeploying region " + hri + " from server " + hsa);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          undeployRegion(connection, hsa, hri);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (regionInfoOnly) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          LOG.info("deleting hdfs .regioninfo data: " + hri.toString() + hsa.toString());<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.202"></a>
+<span class="sourceLineNo">203</span>              hri.getEncodedName());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          Path hriPath = new Path(p, HRegionFileSystem.REGION_INFO_FILE);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>          fs.delete(hriPath, true);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (hdfs) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          LOG.info("deleting hdfs data: " + hri.toString() + hsa.toString());<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.212"></a>
+<span class="sourceLineNo">213</span>              hri.getEncodedName());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          HBaseFsck.debugLsr(conf, p);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          boolean success = fs.delete(p, true);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          HBaseFsck.debugLsr(conf, p);<a name="line.217"></a>
 <span class="sourceLineNo">218</span>        }<a name="line.218"></a>
 <span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>        if (regionInfoOnly) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          LOG.info("deleting hdfs .regioninfo data: " + hri.toString() + hsa.toString());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              hri.getEncodedName());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          Path hriPath = new Path(p, HRegionFileSystem.REGION_INFO_FILE);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          fs.delete(hriPath, true);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">220</span>        if (metaRow) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          try (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>            Delete delete = new Delete(deleteRow);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>            meta.delete(delete);<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>      }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      LOG.info(hri.toString() + hsa.toString());<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>        if (hdfs) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          LOG.info("deleting hdfs data: " + hri.toString() + hsa.toString());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          Path rootDir = FSUtils.getRootDir(conf);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          FileSystem fs = rootDir.getFileSystem(conf);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          Path p = new Path(FSUtils.getTableDir(rootDir, htd.getTableName()),<a name="line.234"></a>
-<span class="sourceLineNo">235</span>              hri.getEncodedName());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          HBaseFsck.debugLsr(conf, p);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          boolean success = fs.delete(p, true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          HBaseFsck.debugLsr(conf, p);<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>        if (metaRow) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>          try (Table meta = connection.getTable(TableName.META_TABLE_NAME, tableExecutorService)) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            Delete delete = new Delete(deleteRow);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            meta.delete(delete);<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>      LOG.info(hri.toString() + hsa.toString());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    TEST_UTIL.getMetaTableRows(htd.getTableName());<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    LOG.info("*** After delete:");<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    dumpMeta(htd.getTableName());<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>   * Setup a clean table before we start mucking with it.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   *<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * It will set tbl which needs to be closed after test<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @throws IOException<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @throws InterruptedException<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * @throws KeeperException<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  void setupTable(TableName tablename) throws Exception {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    setupTableWithRegionReplica(tablename, 1);<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>   * Setup a clean table with a certain region_replica count<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   *<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * It will set tbl which needs to be closed after test<a name="line.273"></a>
+<span class="sourceLineNo">230</span>    TEST_UTIL.getMetaTableRows(htd.getTableName());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    LOG.info("*** After delete:");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    dumpMeta(htd.getTableName());<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * Setup a clean table before we start mucking with it.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   *<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * It will set tbl which needs to be closed after test<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   *<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @throws IOException<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @throws InterruptedException<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @throws KeeperException<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  void setupTable(TableName tablename) throws Exception {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    setupTableWithRegionReplica(tablename, 1);<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>   * Setup a clean table with a certain region_replica count<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   *<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * It will set tbl which needs to be closed after test<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   *<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   * @throws Exception<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  void setupTableWithRegionReplica(TableName tablename, int replicaCount) throws Exception {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    desc.setRegionReplication(replicaCount);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    for (byte[] row : ROWKEYS) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      Put p = new Put(row);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      puts.add(p);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    tbl.put(puts);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * Setup a clean table with a mob-enabled column.<a name="line.273"></a>
 <span class="sourceLineNo">274</span>   *<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * @throws Exception<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  void setupTableWithRegionReplica(TableName tablename, int replicaCount) throws Exception {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    desc.setRegionReplication(replicaCount);<a name="line.279"></a>
+<span class="sourceLineNo">275</span>   * @param tablename The name of a table to be created.<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * @throws Exception<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  void setupMobTable(TableName tablename) throws Exception {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.279"></a>
 <span class="sourceLineNo">280</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    for (byte[] row : ROWKEYS) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      Put p = new Put(row);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      puts.add(p);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    tbl.put(puts);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Setup a clean table with a mob-enabled column.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   *<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @param tablename The name of a table to be created.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws Exception<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  void setupMobTable(TableName tablename) throws Exception {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    HTableDescriptor desc = new HTableDescriptor(tablename);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    HColumnDescriptor hcd = new HColumnDescriptor(Bytes.toString(FAM));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    hcd.setMobEnabled(true);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    hcd.setMobThreshold(0);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (byte[] row : ROWKEYS) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Put p = new Put(row);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      puts.add(p);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    tbl.put(puts);<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>   * Counts the number of row to verify data loss or non-dataloss.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  int countRows() throws IOException {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>     Scan s = new Scan();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>     ResultScanner rs = tbl.getScanner(s);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>     int i = 0;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>     while(rs.next() !=null) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>       i++;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>     }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>     return i;<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>   * delete table in preparation for next test<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   *<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * @param tablename<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @throws IOException<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  void cleanupTable(TableName tablename) throws Exception {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    if (tbl != null) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      tbl.close();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      tbl = null;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>    ((ClusterConnection) connection).clearRegionCache();<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    deleteTable(TEST_UTIL, tablename);<a name="line.344"></a>
+<span class="sourceLineNo">281</span>    hcd.setMobEnabled(true);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    hcd.setMobThreshold(0);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    desc.addFamily(hcd); // If a table has no CF's it doesn't get checked<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    createTable(TEST_UTIL, desc, SPLITS);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    tbl = connection.getTable(tablename, tableExecutorService);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Put&gt; puts = new ArrayList&lt;Put&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    for (byte[] row : ROWKEYS) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      Put p = new Put(row);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      p.addColumn(FAM, Bytes.toBytes("val"), row);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      puts.add(p);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    tbl.put(puts);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span>  /**<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   * Counts the number of row to verify data loss or non-dataloss.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  int countRows() throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     Scan s = new Scan();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>     ResultScanner rs = tbl.getScanner(s);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>     int i = 0;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>     while(rs.next() !=null) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>       i++;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     return i;<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>   * delete table in preparation for next test<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   *<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * @param tablename<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * @throws IOException<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  void cleanupTable(TableName tablename) throws Exception {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    if (tbl != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      tbl.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      tbl = null;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>    ((ClusterConnection) connection).clearRegionCache();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    deleteTable(TEST_UTIL, tablename);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * Get region info from local cluster.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(final Admin admin) throws IOException {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    ClusterStatus status = admin.getClusterStatus();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Collection&lt;ServerName&gt; regionServers = status.getServers();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    Map&lt;ServerName, List&lt;String&gt;&gt; mm =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        new HashMap&lt;ServerName, List&lt;String&gt;&gt;();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    for (ServerName hsi : regionServers) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>      // list all online regions from this region server<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      List&lt;String&gt; regionNames = new ArrayList&lt;String&gt;();<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      for (HRegionInfo hri : regions) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        regionNames.add(hri.getRegionNameAsString());<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      mm.put(hsi, regionNames);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return mm;<a name="line.344"></a>
 <span class="sourceLineNo">345</span>  }<a name="line.345"></a>
 <span class="sourceLineNo">346</span><a name="line.346"></a>
 <span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * Get region info from local cluster.<a name="line.348"></a>
+<span class="sourceLineNo">348</span>   * Returns the HSI a region info is on.<a name="line.348"></a>
 <span class="sourceLineNo">349</span>   */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  Map&lt;ServerName, List&lt;String&gt;&gt; getDeployedHRIs(final Admin admin) throws IOException {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    ClusterStatus status = admin.getClusterStatus();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    Collection&lt;ServerName&gt; regionServers = status.getServers();<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    Map&lt;ServerName, List&lt;String&gt;&gt; mm =<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        new HashMap&lt;ServerName, List&lt;String&gt;&gt;();<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    for (ServerName hsi : regionServers) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      AdminProtos.AdminService.BlockingInterface server = ((HConnection) connection).getAdmin(hsi);<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>      // list all online regions from this region server<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      List&lt;HRegionInfo&gt; regions = ProtobufUtil.getOnlineRegions(server);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      List&lt;String&gt; regionNames = new ArrayList&lt;String&gt;();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      for (HRegionInfo hri : regions) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        regionNames.add(hri.getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      mm.put(hsi, regionNames);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return mm;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * Returns the HSI a region info is on.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    for (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      if (e.getValue().contains(hri.getRegionNameAsString())) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        return e.getKey();<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>    return null;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
+<span class="sourceLineNo">350</span>  ServerName findDeployedHSI(Map&lt;ServerName, List&lt;String&gt;&gt; mm, HRegionInfo hri) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    for (Map.Entry&lt;ServerName,List &lt;String&gt;&gt; e : mm.entrySet()) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (e.getValue().contains(hri.getRegionNameAsString())) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        return e.getKey();<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>    return null;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public void deleteTableDir(TableName table) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    Path rootDir = FSUtils.getRootDir(conf);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    FileSystem fs = rootDir.getFileSystem(conf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    Path p = FSUtils.getTableDir(rootDir, table);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    HBaseFsck.debugLsr(conf, p);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    boolean success = fs.delete(p, true);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    LOG.info("Deleted " + p + " sucessfully? " + success);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * We don't have an easy way to verify that a flush completed, so we loop until we find a<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * legitimate hfile and return it.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param fs<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param table<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @return Path of a flushed hfile.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @throws IOException<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  Path getFlushedHFile(FileSystem fs, TableName table) throws IOException {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    Path tableDir= FSUtils.getTableDir(FSUtils.getRootDir(conf), table);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    Path regionDir = FSUtils.getRegionDirs(fs, tableDir).get(0);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    Path famDir = new Path(regionDir, FAM_STR);<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><a name="line.383"></a>
-<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * This creates and fixes a bad table with a missing region -- hole in meta<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * and data present but .regioinfino missing (an orphan hdfs region)in the fs.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @Test (timeout=180000)<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public void testHDFSRegioninfoMissing() throws Exception {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    TableName table = TableName.valueOf("tableHDFSRegioninfoMissing");<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    try {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      setupTable(table);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.393"></a>
+<span class="sourceLineNo">381</span>    // keep doing this until we get a legit hfile<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    while (true) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      FileStatus[] hfFss = fs.listStatus(famDir);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      if (hfFss.length == 0) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        continue;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      for (FileStatus hfs : hfFss) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        if (!hfs.isDirectory()) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          return hfs.getPath();<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>    }<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>      // Mess it up by leaving a hole in the meta data<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      admin.disableTable(table);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          true, false, true, HRegionInfo.DEFAULT_REPLICA_ID);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      admin.enableTable(table);<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      assertErrors(hbck,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          new ERROR_CODE[] { ERROR_CODE.ORPHAN_HDFS_REGION, ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.403"></a>
-<span class="sourceLineNo">404</span>              ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      // holes are separate from overlap groups<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>      // fix hole<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      doFsck(conf, true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>      // check that hole fixed<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      assertNoErrors(doFsck(conf, false));<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    } finally {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      cleanupTable(table);<a name="line.415"></a>
+<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * Gets flushed mob files.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * @param fs The current file system.<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * @param table The current table name.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return Path of a flushed hfile.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * @throws IOException<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  Path getFlushedMobFile(FileSystem fs, TableName table) throws IOException {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    Path famDir = MobUtils.getMobFamilyPath(conf, table, FAM_STR);<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // keep doing this until we get a legit hfile<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    while (true) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      FileStatus[] hfFss = fs.listStatus(famDir);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      if (hfFss.length == 0) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        continue;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      for (FileStatus hfs : hfFss) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if (!hfs.isDirectory()) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          return hfs.getPath();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
 <span class="sourceLineNo">416</span>    }<a name="line.416"></a>
 <span class="sourceLineNo">417</span>  }<a name="line.417"></a>
 <span class="sourceLineNo">418</span><a name="line.418"></a>
 <span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * This creates and fixes a bad table with a region that is missing meta and<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * not assigned to a region server.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  @Test (timeout=180000)<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public void testNotInMetaOrDeployedHole() throws Exception {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    TableName table =<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        TableName.valueOf("tableNotInMetaOrDeployedHole");<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    try {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      setupTable(table);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>      // Mess it up by leaving a hole in the meta data<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      admin.disableTable(table);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes("B"), Bytes.toBytes("C"), true,<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          true, false); // don't rm from fs<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      admin.enableTable(table);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      assertErrors(hbck,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED, ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // holes are separate from overlap groups<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>      // fix hole<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      assertErrors(doFsck(conf, true),<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED, ERROR_CODE.HOLE_IN_REGION_CHAIN });<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // check that hole fixed<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      assertNoErrors(doFsck(conf, false));<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    } finally {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      cleanupTable(table);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    }<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>  @Test (timeout=180000)<a name="line.455"></a>
-<span class="sourceLineNo">456</span>  public void testCleanUpDaughtersNotInMetaAfterFailedSplit() throws Exception {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    TableName table = TableName.valueOf("testCleanUpDaughtersNotInMetaAfterFailedSplit");<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    try {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      HTableDescriptor desc = new HTableDescriptor(table);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      desc.addFamily(new HColumnDescriptor(Bytes.toBytes("f")));<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      createTable(TEST_UTIL, desc, null);<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>      tbl = connection.getTable(desc.getTableName());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (int i = 0; i &lt; 5; i++) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        Put p1 = new Put(("r" + i).getBytes());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        p1.addColumn(Bytes.toBytes("f"), "q1".getBytes(), "v".getBytes());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        tbl.put(p1);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      }<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      admin.flush(desc.getTableName());<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      List&lt;HRegion&gt; regions = cluster.getRegions(desc.getTableName());<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      int serverWith = cluster.getServerWith(regions.get(0).getRegionInfo().getRegionName());<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      HRegionServer regionServer = cluster.getRegionServer(serverWith);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      cluster.getServerWith(regions.get(0).getRegionInfo().getRegionName());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      SplitTransactionImpl st = (SplitTransactionImpl)<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        new SplitTransactionFactory(TEST_UTIL.getConfiguration())<a name="line.476"></a>
-<span class="sourceLineNo">477</span>          .create(regions.get(0), Bytes.toBytes("r3"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      st.prepare();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      st.stepsBeforePONR(regionServer, regionServer, false);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      AssignmentManager am = cluster.getMaster().getAssignmentManager();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Map&lt;String, RegionState&gt; regionsInTransition = am.getRegionStates().getRegionsInTransition();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      for (RegionState state : regionsInTransition.values()) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        am.regionOffline(state.getRegion());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      Map&lt;HRegionInfo, ServerName&gt; regionsMap = new HashMap&lt;HRegionInfo, ServerName&gt;();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      regionsMap.put(regions.get(0).getRegionInfo(), regionServer.getServerName());<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      am.assign(regionsMap);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      am.waitForAssignment(regions.get(0).getRegionInfo());<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      HBaseFsck hbck = doFsck(conf, false);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          ERROR_CODE.NOT_IN_META_OR_DEPLOYED });<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      // holes are separate from overlap groups<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      assertEquals(0, hbck.getOverlapGroups(table).size());<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // fix hole<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      assertErrors(<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          doFsck(conf, false, true, false, false, false, false, false, false, false, false, false,<a name="line.497"></a>
-<span class="sourceLineNo">498</span>            null),<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          new ERROR_CODE[] { ERROR_CODE.NOT_IN_META_OR_DEPLOYED,<a name="line.499"></a>
-<span class="sourceLineNo">500</span>              ERROR_CODE.NOT_IN_META_OR_DEPLOYED });<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>      // check that hole fixed<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      assertNoErrors(doFsck(conf, false));<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      assertEquals(5, countRows());<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    } finally {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (tbl != null) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        tbl.close();<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        tbl = null;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      cleanupTable(table);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  /**<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * This creates fixes a bad table with a hole in meta.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   */<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  @Test (timeout=180000)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public void testNotInMetaHole() throws Exception {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    TableName table =<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        TableName.valueOf("tableNotInMetaHole");<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      setupTable(table);<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      assertEquals(ROWKEYS.length, countRows());<a name="line.523"></a>
+<span class="sourceLineNo">420</span>   * Creates a new mob file name by the old one.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @param oldFileName The old mob file name.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return The new mob file name.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  String createMobFileName(String oldFileName) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    MobFileName mobFileName = MobFileName.create(oldFileName);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    String startKey = mobFileName.getStartKey();<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    String date = mobFileName.getDate();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    return MobFileName.create(startKey, date, UUID.randomUUID().toString().replaceAll("-", ""))<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      .getFileName();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span><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>  /**<a name="line.435"></a>
+<span class="sourceLineNo

<TRUNCATED>

[19/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index 3761b57..0278bf1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,40 +77,40 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 24, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setBcv(String bcv)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 24, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_bcv = bcv;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_bcv__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getBcv()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_bcv;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_bcv;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getBcv__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_bcv__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_bcv__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 21, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFilter(String filter)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 21, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_filter = filter;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_filter__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFilter()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_filter;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_filter;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFilter__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_filter__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_filter__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,17 +156,17 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String bcv;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setBcv(p_bcv);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  }<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  <a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String filter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String format;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFilter(p_filter);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
index 3761b57..0278bf1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,40 +77,40 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 24, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setBcv(String bcv)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 24, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_bcv = bcv;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_bcv__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getBcv()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_bcv;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_bcv;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getBcv__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_bcv__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_bcv__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 21, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFilter(String filter)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 21, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_filter = filter;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_filter__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFilter()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_filter;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_filter;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFilter__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_filter__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_filter__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,17 +156,17 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String bcv;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setBcv(p_bcv);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  }<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  <a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String filter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String format;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFilter(p_filter);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index 3761b57..0278bf1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,40 +77,40 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 24, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setBcv(String bcv)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 24, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_bcv = bcv;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_bcv__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getBcv()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_bcv;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_bcv;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getBcv__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_bcv__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_bcv__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 21, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFilter(String filter)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 21, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_filter = filter;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_filter__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFilter()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_filter;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_filter;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFilter__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_filter__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_filter__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,17 +156,17 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String bcv;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setBcv(p_bcv);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  }<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  <a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String filter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String format;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFilter(p_filter);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index c0cf607..0932155 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="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -330,7 +330,7 @@ for more details.</p>
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2015-12-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2015-12-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index 5d34f6a..73626e1 100644
--- a/hbase-annotations/checkstyle.html
+++ b/hbase-annotations/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-17</span>
+        <span id="publishDate">Last Published: 2015-12-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/hbase-annotations/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/distribution-management.html b/hbase-annotations/distribution-management.html
index 6ebe098..476f837 100644
--- a/hbase-annotations/distribution-management.html
+++ b/hbase-annotations/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-17</span>
+        <span id="publishDate">Last Published: 2015-12-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index 302d9ae..fbb27a8 100644
--- a/hbase-annotations/integration.html
+++ b/hbase-annotations/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2015-12-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20151217" />
+    <meta name="Date-Revision-yyyymmdd" content="20151218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2015-12-17</span>
+        <span id="publishDate">Last Published: 2015-12-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


[32/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Listener.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     * connections will be looked at for the cleanup.<a name="line.735"></a>
+<span class="sourceLin

<TRUNCATED>

[39/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index c3ab859..98dbe62 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -397,94 +397,94 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_serverManager</a></pre>
+<h4>m_frags</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_frags__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_serverManager__IsNotDefault</a></pre>
+<h4>m_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_deadServers</a></pre>
+<h4>m_assignmentManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_deadServers__IsNotDefault</a></pre>
+<h4>m_assignmentManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.173">m_format</a></pre>
+<h4>m_serverManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.173">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_serverManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_format__IsNotDefault</a></pre>
+<h4>m_serverManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.190">m_frags</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.190">m_format</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_frags__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_assignmentManager</a></pre>
+<h4>m_servers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_servers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_catalogJanitorEnabled">
@@ -505,22 +505,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_servers</a></pre>
+<h4>m_deadServers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_deadServers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_servers__IsNotDefault</a></pre>
+<h4>m_deadServers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_filter">
@@ -611,139 +611,139 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
+<h4>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
 </li>
 </ul>
-<a name="getServerManager()">
+<a name="getFrags()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getServerManager</a>()</pre>
+<h4>getFrags</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault()">
+<a name="getFrags__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getServerManager__IsNotDefault</a>()</pre>
+<h4>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
 </li>
 </ul>
-<a name="getDeadServers()">
+<a name="getAssignmentManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getDeadServers</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault()">
+<a name="getAssignmentManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getDeadServers__IsNotDefault</a>()</pre>
+<h4>getAssignmentManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getServerManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.169">getFormat</a>()</pre>
+<h4>getServerManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.169">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getServerManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getFormat__IsNotDefault</a>()</pre>
+<h4>getServerManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getFrags()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.186">getFrags</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.186">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFrags__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 </li>
 </ul>
-<a name="getAssignmentManager()">
+<a name="getServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getAssignmentManager</a>()</pre>
+<h4>getServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault()">
+<a name="getServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setCatalogJanitorEnabled(boolean)">
@@ -773,31 +773,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
+<h4>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
 </li>
 </ul>
-<a name="getServers()">
+<a name="getDeadServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getServers</a>()</pre>
+<h4>getDeadServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault()">
+<a name="getDeadServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getServers__IsNotDefault</a>()</pre>
+<h4>getDeadServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setFilter(java.lang.String)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index c116c28..b75a171 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -332,49 +332,49 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.275">metaLocation</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.282">serverManager</a></pre>
+<h4>frags</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.282">frags</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">deadServers</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.296">format</a></pre>
+<h4>serverManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.296">serverManager</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.303">frags</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.303">format</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">assignmentManager</a></pre>
+<h4>servers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">servers</a></pre>
 </li>
 </ul>
 <a name="catalogJanitorEnabled">
@@ -386,13 +386,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.317">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">servers</a></pre>
+<h4>deadServers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">deadServers</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -482,49 +482,49 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
+<h4>setFrags</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.297">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setServerManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.297">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
+<h4>setServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
 </li>
 </ul>
 <a name="setCatalogJanitorEnabled(boolean)">
@@ -536,13 +536,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
+<h4>setDeadServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
 </li>
 </ul>
 <a name="setFilter(java.lang.String)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index 632ecc0..011937d 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -273,49 +273,49 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.63">metaLocation</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">serverManager</a></pre>
+<h4>frags</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">frags</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">deadServers</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">format</a></pre>
+<h4>serverManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">serverManager</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">frags</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">format</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">assignmentManager</a></pre>
+<h4>servers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">servers</a></pre>
 </li>
 </ul>
 <a name="catalogJanitorEnabled">
@@ -327,13 +327,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">servers</a></pre>
+<h4>deadServers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">deadServers</a></pre>
 </li>
 </ul>
 <a name="filter">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index b3dc753..880b127 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -279,40 +279,40 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.71">m_regionServer</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_format</a></pre>
+<h4>m_bcv</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_bcv</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_bcv__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_format__IsNotDefault</a></pre>
+<h4>m_bcv__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_bcv__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_bcv">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_bcv</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_bcv__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcv__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_bcn">
@@ -333,22 +333,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_filter</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_format</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_filter__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -394,58 +394,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.67">getRegionServer</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setBcv(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setBcv</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getBcv()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getFormat</a>()</pre>
+<h4>getBcv</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getBcv</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getBcv__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getFormat__IsNotDefault</a>()</pre>
+<h4>getBcv__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getBcv__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setBcv(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getBcv()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getBcv</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getBcv__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcv__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setBcn(java.lang.String)">
@@ -475,31 +475,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFilter</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFilter__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

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

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


[36/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Call.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     * connections will be looked at for the cleanup.<a name="line.735"></a>
+<span class="sourceLineNo">736</span>     

<TRUNCATED>

[10/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/xref-test/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html b/xref-test/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
index 37bc490..37cb442 100644
--- a/xref-test/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
+++ b/xref-test/org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html
@@ -30,86 +30,161 @@
 <a class="jxr_linenumber" name="20" href="#20">20</a>  
 <a class="jxr_linenumber" name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.CompatibilityFactory;
 <a class="jxr_linenumber" name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseTestingUtility;
-<a class="jxr_linenumber" name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
-<a class="jxr_linenumber" name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
-<a class="jxr_linenumber" name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Waiter;
-<a class="jxr_linenumber" name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServerInterface;
-<a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.metrics.BaseSource;
-<a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.test.MetricsAssertHelper;
-<a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.ClientTests;
-<a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.MediumTests;
-<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Bytes;
-<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.junit.AfterClass;
-<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.junit.BeforeClass;
-<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.junit.Test;
-<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.junit.experimental.categories.Category;
-<a class="jxr_linenumber" name="36" href="#36">36</a>  
-<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
-<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> java.util.List;
-<a class="jxr_linenumber" name="39" href="#39">39</a>  
-<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> junit.framework.TestCase.assertEquals;
-<a class="jxr_linenumber" name="41" href="#41">41</a>  
-<a class="jxr_linenumber" name="42" href="#42">42</a>  <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="43" href="#43">43</a>  <em class="jxr_javadoccomment"> * This test sets the multi size WAAAAAY low and then checks to make sure that gets will still make</em>
-<a class="jxr_linenumber" name="44" href="#44">44</a>  <em class="jxr_javadoccomment"> * progress.</em>
-<a class="jxr_linenumber" name="45" href="#45">45</a>  <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="46" href="#46">46</a>  @Category({MediumTests.<strong class="jxr_keyword">class</strong>, ClientTests.<strong class="jxr_keyword">class</strong>})
-<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html">TestMultiRespectsLimits</a> {
-<a class="jxr_linenumber" name="48" href="#48">48</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> TEST_UTIL = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a>();
-<a class="jxr_linenumber" name="49" href="#49">49</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/test/MetricsAssertHelper.html">MetricsAssertHelper</a> METRICS_ASSERT =
-<a class="jxr_linenumber" name="50" href="#50">50</a>        CompatibilityFactory.getInstance(MetricsAssertHelper.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="51" href="#51">51</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[] FAMILY = Bytes.toBytes(<span class="jxr_string">"D"</span>);
-<a class="jxr_linenumber" name="52" href="#52">52</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> MAX_SIZE = 500;
-<a class="jxr_linenumber" name="53" href="#53">53</a>  
-<a class="jxr_linenumber" name="54" href="#54">54</a>    @BeforeClass
-<a class="jxr_linenumber" name="55" href="#55">55</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> setUpBeforeClass() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="56" href="#56">56</a>      TEST_UTIL.getConfiguration().setLong(
-<a class="jxr_linenumber" name="57" href="#57">57</a>          HConstants.HBASE_SERVER_SCANNER_MAX_RESULT_SIZE_KEY,
-<a class="jxr_linenumber" name="58" href="#58">58</a>          MAX_SIZE);
-<a class="jxr_linenumber" name="59" href="#59">59</a>  
-<a class="jxr_linenumber" name="60" href="#60">60</a>      <em class="jxr_comment">// Only start on regionserver so that all regions are on the same server.</em>
-<a class="jxr_linenumber" name="61" href="#61">61</a>      TEST_UTIL.startMiniCluster(1);
-<a class="jxr_linenumber" name="62" href="#62">62</a>    }
-<a class="jxr_linenumber" name="63" href="#63">63</a>  
-<a class="jxr_linenumber" name="64" href="#64">64</a>    @AfterClass
-<a class="jxr_linenumber" name="65" href="#65">65</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> tearDownAfterClass() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="66" href="#66">66</a>      TEST_UTIL.shutdownMiniCluster();
+<a class="jxr_linenumber" name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HColumnDescriptor;
+<a class="jxr_linenumber" name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
+<a class="jxr_linenumber" name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
+<a class="jxr_linenumber" name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
+<a class="jxr_linenumber" name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Waiter;
+<a class="jxr_linenumber" name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;
+<a class="jxr_linenumber" name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ipc.RpcServerInterface;
+<a class="jxr_linenumber" name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.metrics.BaseSource;
+<a class="jxr_linenumber" name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionServer;
+<a class="jxr_linenumber" name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.test.MetricsAssertHelper;
+<a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.ClientTests;
+<a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.MediumTests;
+<a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Bytes;
+<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.junit.AfterClass;
+<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.junit.BeforeClass;
+<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.junit.Test;
+<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.junit.experimental.categories.Category;
+<a class="jxr_linenumber" name="40" href="#40">40</a>  
+<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
+<a class="jxr_linenumber" name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> java.util.List;
+<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.ThreadLocalRandom;
+<a class="jxr_linenumber" name="44" href="#44">44</a>  
+<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> junit.framework.TestCase.assertEquals;
+<a class="jxr_linenumber" name="46" href="#46">46</a>  
+<a class="jxr_linenumber" name="47" href="#47">47</a>  <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="48" href="#48">48</a>  <em class="jxr_javadoccomment"> * This test sets the multi size WAAAAAY low and then checks to make sure that gets will still make</em>
+<a class="jxr_linenumber" name="49" href="#49">49</a>  <em class="jxr_javadoccomment"> * progress.</em>
+<a class="jxr_linenumber" name="50" href="#50">50</a>  <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="51" href="#51">51</a>  @Category({MediumTests.<strong class="jxr_keyword">class</strong>, ClientTests.<strong class="jxr_keyword">class</strong>})
+<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../org/apache/hadoop/hbase/client/TestMultiRespectsLimits.html">TestMultiRespectsLimits</a> {
+<a class="jxr_linenumber" name="53" href="#53">53</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> TEST_UTIL = <strong class="jxr_keyword">new</strong> <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a>();
+<a class="jxr_linenumber" name="54" href="#54">54</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../org/apache/hadoop/hbase/test/MetricsAssertHelper.html">MetricsAssertHelper</a> METRICS_ASSERT =
+<a class="jxr_linenumber" name="55" href="#55">55</a>        CompatibilityFactory.getInstance(MetricsAssertHelper.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="56" href="#56">56</a>    <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">static</strong> byte[] FAMILY = Bytes.toBytes(<span class="jxr_string">"D"</span>);
+<a class="jxr_linenumber" name="57" href="#57">57</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> MAX_SIZE = 500;
+<a class="jxr_linenumber" name="58" href="#58">58</a>  
+<a class="jxr_linenumber" name="59" href="#59">59</a>    @BeforeClass
+<a class="jxr_linenumber" name="60" href="#60">60</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> setUpBeforeClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="61" href="#61">61</a>      TEST_UTIL.getConfiguration().setLong(
+<a class="jxr_linenumber" name="62" href="#62">62</a>          HConstants.HBASE_SERVER_SCANNER_MAX_RESULT_SIZE_KEY,
+<a class="jxr_linenumber" name="63" href="#63">63</a>          MAX_SIZE);
+<a class="jxr_linenumber" name="64" href="#64">64</a>  
+<a class="jxr_linenumber" name="65" href="#65">65</a>      <em class="jxr_comment">// Only start on regionserver so that all regions are on the same server.</em>
+<a class="jxr_linenumber" name="66" href="#66">66</a>      TEST_UTIL.startMiniCluster(1);
 <a class="jxr_linenumber" name="67" href="#67">67</a>    }
 <a class="jxr_linenumber" name="68" href="#68">68</a>  
-<a class="jxr_linenumber" name="69" href="#69">69</a>    @Test
-<a class="jxr_linenumber" name="70" href="#70">70</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testMultiLimits() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="71" href="#71">71</a>      <strong class="jxr_keyword">final</strong> TableName name = TableName.valueOf(<span class="jxr_string">"testMultiLimits"</span>);
-<a class="jxr_linenumber" name="72" href="#72">72</a>      Table t = TEST_UTIL.createTable(name, FAMILY);
-<a class="jxr_linenumber" name="73" href="#73">73</a>      TEST_UTIL.loadTable(t, FAMILY, false);
-<a class="jxr_linenumber" name="74" href="#74">74</a>  
-<a class="jxr_linenumber" name="75" href="#75">75</a>      <em class="jxr_comment">// Split the table to make sure that the chunking happens accross regions.</em>
-<a class="jxr_linenumber" name="76" href="#76">76</a>      <strong class="jxr_keyword">try</strong> (<strong class="jxr_keyword">final</strong> Admin admin = TEST_UTIL.getHBaseAdmin()) {
-<a class="jxr_linenumber" name="77" href="#77">77</a>        admin.split(name);
-<a class="jxr_linenumber" name="78" href="#78">78</a>        TEST_UTIL.waitFor(60000, <strong class="jxr_keyword">new</strong> Waiter.Predicate&lt;Exception&gt;() {
-<a class="jxr_linenumber" name="79" href="#79">79</a>          @Override
-<a class="jxr_linenumber" name="80" href="#80">80</a>          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> evaluate() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="81" href="#81">81</a>            <strong class="jxr_keyword">return</strong> admin.getTableRegions(name).size() &gt; 1;
-<a class="jxr_linenumber" name="82" href="#82">82</a>          }
-<a class="jxr_linenumber" name="83" href="#83">83</a>        });
-<a class="jxr_linenumber" name="84" href="#84">84</a>      }
-<a class="jxr_linenumber" name="85" href="#85">85</a>      List&lt;Get&gt; gets = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(MAX_SIZE);
-<a class="jxr_linenumber" name="86" href="#86">86</a>  
-<a class="jxr_linenumber" name="87" href="#87">87</a>      <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; MAX_SIZE; i++) {
-<a class="jxr_linenumber" name="88" href="#88">88</a>        gets.add(<strong class="jxr_keyword">new</strong> Get(HBaseTestingUtility.ROWS[i]));
+<a class="jxr_linenumber" name="69" href="#69">69</a>    @AfterClass
+<a class="jxr_linenumber" name="70" href="#70">70</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> tearDownAfterClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="71" href="#71">71</a>      TEST_UTIL.shutdownMiniCluster();
+<a class="jxr_linenumber" name="72" href="#72">72</a>    }
+<a class="jxr_linenumber" name="73" href="#73">73</a>  
+<a class="jxr_linenumber" name="74" href="#74">74</a>    @Test
+<a class="jxr_linenumber" name="75" href="#75">75</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testMultiLimits() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="76" href="#76">76</a>      <strong class="jxr_keyword">final</strong> TableName name = TableName.valueOf(<span class="jxr_string">"testMultiLimits"</span>);
+<a class="jxr_linenumber" name="77" href="#77">77</a>      Table t = TEST_UTIL.createTable(name, FAMILY);
+<a class="jxr_linenumber" name="78" href="#78">78</a>      TEST_UTIL.loadTable(t, FAMILY, false);
+<a class="jxr_linenumber" name="79" href="#79">79</a>  
+<a class="jxr_linenumber" name="80" href="#80">80</a>      <em class="jxr_comment">// Split the table to make sure that the chunking happens accross regions.</em>
+<a class="jxr_linenumber" name="81" href="#81">81</a>      <strong class="jxr_keyword">try</strong> (<strong class="jxr_keyword">final</strong> Admin admin = TEST_UTIL.getAdmin()) {
+<a class="jxr_linenumber" name="82" href="#82">82</a>        admin.split(name);
+<a class="jxr_linenumber" name="83" href="#83">83</a>        TEST_UTIL.waitFor(60000, <strong class="jxr_keyword">new</strong> Waiter.Predicate&lt;Exception&gt;() {
+<a class="jxr_linenumber" name="84" href="#84">84</a>          @Override
+<a class="jxr_linenumber" name="85" href="#85">85</a>          <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> evaluate() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="86" href="#86">86</a>            <strong class="jxr_keyword">return</strong> admin.getTableRegions(name).size() &gt; 1;
+<a class="jxr_linenumber" name="87" href="#87">87</a>          }
+<a class="jxr_linenumber" name="88" href="#88">88</a>        });
 <a class="jxr_linenumber" name="89" href="#89">89</a>      }
-<a class="jxr_linenumber" name="90" href="#90">90</a>      Result[] results = t.get(gets);
-<a class="jxr_linenumber" name="91" href="#91">91</a>      assertEquals(MAX_SIZE, results.length);
-<a class="jxr_linenumber" name="92" href="#92">92</a>      RpcServerInterface rpcServer = TEST_UTIL.getHBaseCluster().getRegionServer(0).getRpcServer();
-<a class="jxr_linenumber" name="93" href="#93">93</a>      BaseSource s = rpcServer.getMetrics().getMetricsSource();
-<a class="jxr_linenumber" name="94" href="#94">94</a>  
-<a class="jxr_linenumber" name="95" href="#95">95</a>      <em class="jxr_comment">// Cells from TEST_UTIL.loadTable have a length of 27.</em>
-<a class="jxr_linenumber" name="96" href="#96">96</a>      <em class="jxr_comment">// Multiplying by less than that gives an easy lower bound on size.</em>
-<a class="jxr_linenumber" name="97" href="#97">97</a>      <em class="jxr_comment">// However in reality each kv is being reported as much higher than that.</em>
-<a class="jxr_linenumber" name="98" href="#98">98</a>      METRICS_ASSERT.assertCounterGt(<span class="jxr_string">"exceptions"</span>, (MAX_SIZE * 25) / MAX_SIZE, s);
-<a class="jxr_linenumber" name="99" href="#99">99</a>      METRICS_ASSERT.assertCounterGt(<span class="jxr_string">"exceptions.multiResponseTooLarge"</span>,
-<a class="jxr_linenumber" name="100" href="#100">100</a>         (MAX_SIZE * 25) / MAX_SIZE, s);
-<a class="jxr_linenumber" name="101" href="#101">101</a>   }
-<a class="jxr_linenumber" name="102" href="#102">102</a> }
+<a class="jxr_linenumber" name="90" href="#90">90</a>      List&lt;Get&gt; gets = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(MAX_SIZE);
+<a class="jxr_linenumber" name="91" href="#91">91</a>  
+<a class="jxr_linenumber" name="92" href="#92">92</a>      <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; MAX_SIZE; i++) {
+<a class="jxr_linenumber" name="93" href="#93">93</a>        gets.add(<strong class="jxr_keyword">new</strong> Get(HBaseTestingUtility.ROWS[i]));
+<a class="jxr_linenumber" name="94" href="#94">94</a>      }
+<a class="jxr_linenumber" name="95" href="#95">95</a>  
+<a class="jxr_linenumber" name="96" href="#96">96</a>      RpcServerInterface rpcServer = TEST_UTIL.getHBaseCluster().getRegionServer(0).getRpcServer();
+<a class="jxr_linenumber" name="97" href="#97">97</a>      BaseSource s = rpcServer.getMetrics().getMetricsSource();
+<a class="jxr_linenumber" name="98" href="#98">98</a>      <strong class="jxr_keyword">long</strong> startingExceptions = METRICS_ASSERT.getCounter(<span class="jxr_string">"exceptions"</span>, s);
+<a class="jxr_linenumber" name="99" href="#99">99</a>      <strong class="jxr_keyword">long</strong> startingMultiExceptions = METRICS_ASSERT.getCounter(<span class="jxr_string">"exceptions.multiResponseTooLarge"</span>, s);
+<a class="jxr_linenumber" name="100" href="#100">100</a> 
+<a class="jxr_linenumber" name="101" href="#101">101</a>     Result[] results = t.get(gets);
+<a class="jxr_linenumber" name="102" href="#102">102</a>     assertEquals(MAX_SIZE, results.length);
+<a class="jxr_linenumber" name="103" href="#103">103</a> 
+<a class="jxr_linenumber" name="104" href="#104">104</a>     <em class="jxr_comment">// Cells from TEST_UTIL.loadTable have a length of 27.</em>
+<a class="jxr_linenumber" name="105" href="#105">105</a>     <em class="jxr_comment">// Multiplying by less than that gives an easy lower bound on size.</em>
+<a class="jxr_linenumber" name="106" href="#106">106</a>     <em class="jxr_comment">// However in reality each kv is being reported as much higher than that.</em>
+<a class="jxr_linenumber" name="107" href="#107">107</a>     METRICS_ASSERT.assertCounterGt(<span class="jxr_string">"exceptions"</span>,
+<a class="jxr_linenumber" name="108" href="#108">108</a>         startingExceptions + ((MAX_SIZE * 25) / MAX_SIZE), s);
+<a class="jxr_linenumber" name="109" href="#109">109</a>     METRICS_ASSERT.assertCounterGt(<span class="jxr_string">"exceptions.multiResponseTooLarge"</span>,
+<a class="jxr_linenumber" name="110" href="#110">110</a>         startingMultiExceptions + ((MAX_SIZE * 25) / MAX_SIZE), s);
+<a class="jxr_linenumber" name="111" href="#111">111</a>   }
+<a class="jxr_linenumber" name="112" href="#112">112</a> 
+<a class="jxr_linenumber" name="113" href="#113">113</a>   @Test
+<a class="jxr_linenumber" name="114" href="#114">114</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testBlockMultiLimits() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="115" href="#115">115</a>     <strong class="jxr_keyword">final</strong> TableName name = TableName.valueOf(<span class="jxr_string">"testBlockMultiLimits"</span>);
+<a class="jxr_linenumber" name="116" href="#116">116</a>     HTableDescriptor desc = <strong class="jxr_keyword">new</strong> HTableDescriptor(name);
+<a class="jxr_linenumber" name="117" href="#117">117</a>     HColumnDescriptor hcd = <strong class="jxr_keyword">new</strong> HColumnDescriptor(FAMILY);
+<a class="jxr_linenumber" name="118" href="#118">118</a>     hcd.setDataBlockEncoding(DataBlockEncoding.FAST_DIFF);
+<a class="jxr_linenumber" name="119" href="#119">119</a>     desc.addFamily(hcd);
+<a class="jxr_linenumber" name="120" href="#120">120</a>     TEST_UTIL.getHBaseAdmin().createTable(desc);
+<a class="jxr_linenumber" name="121" href="#121">121</a>     Table t = TEST_UTIL.getConnection().getTable(name);
+<a class="jxr_linenumber" name="122" href="#122">122</a> 
+<a class="jxr_linenumber" name="123" href="#123">123</a>     <strong class="jxr_keyword">final</strong> HRegionServer regionServer = TEST_UTIL.getHBaseCluster().getRegionServer(0);
+<a class="jxr_linenumber" name="124" href="#124">124</a>     RpcServerInterface rpcServer = regionServer.getRpcServer();
+<a class="jxr_linenumber" name="125" href="#125">125</a>     BaseSource s = rpcServer.getMetrics().getMetricsSource();
+<a class="jxr_linenumber" name="126" href="#126">126</a>     <strong class="jxr_keyword">long</strong> startingExceptions = METRICS_ASSERT.getCounter(<span class="jxr_string">"exceptions"</span>, s);
+<a class="jxr_linenumber" name="127" href="#127">127</a>     <strong class="jxr_keyword">long</strong> startingMultiExceptions = METRICS_ASSERT.getCounter(<span class="jxr_string">"exceptions.multiResponseTooLarge"</span>, s);
+<a class="jxr_linenumber" name="128" href="#128">128</a> 
+<a class="jxr_linenumber" name="129" href="#129">129</a>     byte[] row = Bytes.toBytes(<span class="jxr_string">"TEST"</span>);
+<a class="jxr_linenumber" name="130" href="#130">130</a>     byte[][] cols = <strong class="jxr_keyword">new</strong> byte[][]{
+<a class="jxr_linenumber" name="131" href="#131">131</a>         Bytes.toBytes(<span class="jxr_string">"0"</span>), <em class="jxr_comment">// Get this</em>
+<a class="jxr_linenumber" name="132" href="#132">132</a>         Bytes.toBytes(<span class="jxr_string">"1"</span>), <em class="jxr_comment">// Buffer</em>
+<a class="jxr_linenumber" name="133" href="#133">133</a>         Bytes.toBytes(<span class="jxr_string">"2"</span>), <em class="jxr_comment">// Buffer</em>
+<a class="jxr_linenumber" name="134" href="#134">134</a>         Bytes.toBytes(<span class="jxr_string">"3"</span>), <em class="jxr_comment">// Get This</em>
+<a class="jxr_linenumber" name="135" href="#135">135</a>         Bytes.toBytes(<span class="jxr_string">"4"</span>), <em class="jxr_comment">// Buffer</em>
+<a class="jxr_linenumber" name="136" href="#136">136</a>         Bytes.toBytes(<span class="jxr_string">"5"</span>), <em class="jxr_comment">// Buffer</em>
+<a class="jxr_linenumber" name="137" href="#137">137</a>     };
+<a class="jxr_linenumber" name="138" href="#138">138</a> 
+<a class="jxr_linenumber" name="139" href="#139">139</a>     <em class="jxr_comment">// Set the value size so that one result will be less than the MAX_SIE</em>
+<a class="jxr_linenumber" name="140" href="#140">140</a>     <em class="jxr_comment">// however the block being reference will be larger than MAX_SIZE.</em>
+<a class="jxr_linenumber" name="141" href="#141">141</a>     <em class="jxr_comment">// This should cause the regionserver to try and send a result immediately.</em>
+<a class="jxr_linenumber" name="142" href="#142">142</a>     byte[] value = <strong class="jxr_keyword">new</strong> byte[MAX_SIZE - 100];
+<a class="jxr_linenumber" name="143" href="#143">143</a>     ThreadLocalRandom.current().nextBytes(value);
+<a class="jxr_linenumber" name="144" href="#144">144</a> 
+<a class="jxr_linenumber" name="145" href="#145">145</a>     <strong class="jxr_keyword">for</strong> (byte[] col:cols) {
+<a class="jxr_linenumber" name="146" href="#146">146</a>       Put p = <strong class="jxr_keyword">new</strong> Put(row);
+<a class="jxr_linenumber" name="147" href="#147">147</a>       p.addImmutable(FAMILY, col, value);
+<a class="jxr_linenumber" name="148" href="#148">148</a>       t.put(p);
+<a class="jxr_linenumber" name="149" href="#149">149</a>     }
+<a class="jxr_linenumber" name="150" href="#150">150</a> 
+<a class="jxr_linenumber" name="151" href="#151">151</a>     <em class="jxr_comment">// Make sure that a flush happens</em>
+<a class="jxr_linenumber" name="152" href="#152">152</a>     <strong class="jxr_keyword">try</strong> (<strong class="jxr_keyword">final</strong> Admin admin = TEST_UTIL.getAdmin()) {
+<a class="jxr_linenumber" name="153" href="#153">153</a>       admin.flush(name);
+<a class="jxr_linenumber" name="154" href="#154">154</a>       TEST_UTIL.waitFor(60000, <strong class="jxr_keyword">new</strong> Waiter.Predicate&lt;Exception&gt;() {
+<a class="jxr_linenumber" name="155" href="#155">155</a>         @Override
+<a class="jxr_linenumber" name="156" href="#156">156</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> evaluate() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="157" href="#157">157</a>           <strong class="jxr_keyword">return</strong> regionServer.getOnlineRegions(name).get(0).getMaxFlushedSeqId() &gt; 3;
+<a class="jxr_linenumber" name="158" href="#158">158</a>         }
+<a class="jxr_linenumber" name="159" href="#159">159</a>       });
+<a class="jxr_linenumber" name="160" href="#160">160</a>     }
+<a class="jxr_linenumber" name="161" href="#161">161</a> 
+<a class="jxr_linenumber" name="162" href="#162">162</a>     List&lt;Get&gt; gets = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(2);
+<a class="jxr_linenumber" name="163" href="#163">163</a>     Get g0 = <strong class="jxr_keyword">new</strong> Get(row);
+<a class="jxr_linenumber" name="164" href="#164">164</a>     g0.addColumn(FAMILY, cols[0]);
+<a class="jxr_linenumber" name="165" href="#165">165</a>     gets.add(g0);
+<a class="jxr_linenumber" name="166" href="#166">166</a> 
+<a class="jxr_linenumber" name="167" href="#167">167</a>     Get g2 = <strong class="jxr_keyword">new</strong> Get(row);
+<a class="jxr_linenumber" name="168" href="#168">168</a>     g2.addColumn(FAMILY, cols[3]);
+<a class="jxr_linenumber" name="169" href="#169">169</a>     gets.add(g2);
+<a class="jxr_linenumber" name="170" href="#170">170</a> 
+<a class="jxr_linenumber" name="171" href="#171">171</a>     Result[] results = t.get(gets);
+<a class="jxr_linenumber" name="172" href="#172">172</a>     assertEquals(2, results.length);
+<a class="jxr_linenumber" name="173" href="#173">173</a>     METRICS_ASSERT.assertCounterGt(<span class="jxr_string">"exceptions"</span>, startingExceptions, s);
+<a class="jxr_linenumber" name="174" href="#174">174</a>     METRICS_ASSERT.assertCounterGt(<span class="jxr_string">"exceptions.multiResponseTooLarge"</span>,
+<a class="jxr_linenumber" name="175" href="#175">175</a>         startingMultiExceptions, s);
+<a class="jxr_linenumber" name="176" href="#176">176</a>   }
+<a class="jxr_linenumber" name="177" href="#177">177</a> }
 </pre>
 <hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
 </html>


[27/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
index 5952d6a..7c00453 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
@@ -433,654 +433,655 @@
 <span class="sourceLineNo">425</span>   * @param hfilesDir directory containing list of hfiles to be loaded into the table<a name="line.425"></a>
 <span class="sourceLineNo">426</span>   * @param table table to which hfiles should be loaded<a name="line.426"></a>
 <span class="sourceLineNo">427</span>   * @param queue queue which needs to be loaded into the table<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @throws IOException If any I/O or network error occurred<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public void prepareHFileQueue(Path hfofDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      boolean validateHFile) throws IOException {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    discoverLoadQueue(queue, hfofDir, validateHFile);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private ExecutorService createExecutorService() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return pool;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for (HColumnDescriptor family : families) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      familyNames.add(family.getNameAsString());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    while (queueIter.hasNext()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      LoadQueueItem lqi = queueIter.next();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        unmatchedFamilies.add(familyNameInHFile);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      String msg =<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              + familyNames;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      LOG.error(msg);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      throw new IOException(msg);<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><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  /**<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * {@link<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @param table Table to which these hfiles should be loaded to<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param conn Connection to use<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    ExecutorService pool = null;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      pool = createExecutorService();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (pool != null) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        pool.shutdown();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>  /**<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * them.  Any failures are re-queued for another pass with the<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * groupOrSplitPhase.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // atomically bulk load the groups.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      final byte[] first = e.getKey().array();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        @Override<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.517"></a>
-<span class="sourceLineNo">518</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return toRetry;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      };<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      try {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>        // LQIs that are requeued to be regrouped.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        queue.addAll(toRetry);<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>      } catch (ExecutionException e1) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        Throwable t = e1.getCause();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (t instanceof IOException) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // At this point something unrecoverable has happened.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          // TODO Implement bulk load recovery<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        throw new IllegalStateException(t);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      } catch (InterruptedException e1) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    for (Entry&lt;ByteBuffer,<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      for (LoadQueueItem lqi: lqis) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        if (count == null) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>          count = new MutableInt();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>          filesMap.put(lqi.family, count);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>        }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        count.increment();<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            + " of region with start key "<a name="line.565"></a>
-<span class="sourceLineNo">566</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          return false;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   */<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    // phase because of the puts that happen in futures.<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    // drain LQIs and figure out bulk load groups<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    while (!queue.isEmpty()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      final LoadQueueItem item = queue.remove();<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          return splits;<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        }<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      };<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      splittingFutures.add(pool.submit(call));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    // get all the results.  All grouping and splitting must finish before<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    // we can attempt the atomic loads.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      try {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        if (splits != null) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          queue.addAll(splits);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      } catch (ExecutionException e1) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        Throwable t = e1.getCause();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        if (t instanceof IOException) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          LOG.error("IOException during splitting", e1);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        throw new IllegalStateException(t);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      } catch (InterruptedException e1) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<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>    return regionGroups;<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>  // unique file name for the table<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  private String getUniqueName() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Table table, byte[] startKey,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      byte[] splitKey) throws IOException {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    final Path hfilePath = item.hfilePath;<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    // above.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    final String TMP_DIR = "_tmp";<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    Path tmpDir = item.hfilePath.getParent();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    if (!tmpDir.getName().equals(TMP_DIR)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      tmpDir = new Path(tmpDir, TMP_DIR);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    LOG.info("HFile at " + hfilePath + " no longer fits inside a single " +<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    "region. Splitting...");<a name="line.642"></a>
-<span class="sourceLineNo">643</span><a name="line.643"></a>
-<span class="sourceLineNo">644</span>    String uniqueName = getUniqueName();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    HColumnDescriptor familyDesc = table.getTableDescriptor().getFamily(item.family);<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    Path botOut = new Path(tmpDir, uniqueName + ".bottom");<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    Path topOut = new Path(tmpDir, uniqueName + ".top");<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    splitStoreFile(getConf(), hfilePath, familyDesc, splitKey, botOut, topOut);<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>    FileSystem fs = tmpDir.getFileSystem(getConf());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    fs.setPermission(tmpDir, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    fs.setPermission(botOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    fs.setPermission(topOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span>    // Add these back at the *front* of the queue, so there's a lower<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // chance that the region will just split again before we get there.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    List&lt;LoadQueueItem&gt; lqis = new ArrayList&lt;LoadQueueItem&gt;(2);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    lqis.add(new LoadQueueItem(item.family, botOut));<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    lqis.add(new LoadQueueItem(item.family, topOut));<a name="line.660"></a>
-<span class="sourceLineNo">661</span><a name="line.661"></a>
-<span class="sourceLineNo">662</span>    LOG.info("Successfully split into new HFiles " + botOut + " and " + topOut);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    return lqis;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * Attempt to assign the given load queue item into its target region group.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * If the hfile boundary no longer fits into a region, physically splits<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * the hfile such that the new bottom half will fit and returns the list of<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * LQI's corresponding to the resultant hfiles.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   *<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * protected for testing<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @throws IOException<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>  protected List&lt;LoadQueueItem&gt; groupOrSplit(Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups,<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      final LoadQueueItem item, final Table table,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys)<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      throws IOException {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    final Path hfilePath = item.hfilePath;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    // fs is the source filesystem<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    if (fs == null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      fs = hfilePath.getFileSystem(getConf());<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    HFile.Reader hfr = HFile.createReader(fs, hfilePath,<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        new CacheConfig(getConf()), getConf());<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    final byte[] first, last;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    try {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      hfr.loadFileInfo();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      first = hfr.getFirstRowKey();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      last = hfr.getLastRowKey();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }  finally {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      hfr.close();<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>    LOG.info("Trying to load hfile=" + hfilePath +<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        " first=" + Bytes.toStringBinary(first) +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        " last="  + Bytes.toStringBinary(last));<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (first == null || last == null) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      assert first == null &amp;&amp; last == null;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      // TODO what if this is due to a bad HFile?<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      LOG.info("hfile " + hfilePath + " has no entries, skipping");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      return null;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    }<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (Bytes.compareTo(first, last) &gt; 0) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new IllegalArgumentException(<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      "Invalid range: " + Bytes.toStringBinary(first) +<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      " &gt; " + Bytes.toStringBinary(last));<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    int idx = Arrays.binarySearch(startEndKeys.getFirst(), first,<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        Bytes.BYTES_COMPARATOR);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    if (idx &lt; 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      // not on boundary, returns -(insertion index).  Calculate region it<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // would be in.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      idx = -(idx + 1) - 1;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    final int indexForCallable = idx;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    /**<a name="line.718"></a>
-<span class="sourceLineNo">719</span>     * we can consider there is a region hole in following conditions. 1) if idx &lt; 0,then first<a name="line.719"></a>
-<span class="sourceLineNo">720</span>     * region info is lost. 2) if the endkey of a region is not equal to the startkey of the next<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * region. 3) if the endkey of the last region is not empty.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    if (indexForCallable &lt; 0) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      throw new IOException("The first region info for table "<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          + table.getName()<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    } else if ((indexForCallable == startEndKeys.getFirst().length - 1)<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        &amp;&amp; !Bytes.equals(startEndKeys.getSecond()[indexForCallable], HConstants.EMPTY_BYTE_ARRAY)) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      throw new IOException("The last region info for table "<a name="line.729"></a>
-<span class="sourceLineNo">730</span>          + table.getName()<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    } else if (indexForCallable + 1 &lt; startEndKeys.getFirst().length<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        &amp;&amp; !(Bytes.compareTo(startEndKeys.getSecond()[indexForCallable],<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          startEndKeys.getFirst()[indexForCallable + 1]) == 0)) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      throw new IOException("The endkey of one region for table "<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          + table.getName()<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          + " is not equal to the startkey of the next region in hbase:meta."<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          + "Please use hbck tool to fix it first.");<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>    boolean lastKeyInRange =<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      Bytes.compareTo(last, startEndKeys.getSecond()[idx]) &lt; 0 ||<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      Bytes.equals(startEndKeys.getSecond()[idx], HConstants.EMPTY_BYTE_ARRAY);<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    if (!lastKeyInRange) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      List&lt;LoadQueueItem&gt; lqis = splitStoreFile(item, table,<a name="line.745"></a>
-<span class="sourceLineNo">746</span>          startEndKeys.getFirst()[indexForCallable],<a name="line.746"></a>
-<span class="sourceLineNo">747</span>          startEndKeys.getSecond()[indexForCallable]);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      return lqis;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>    // group regions.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    regionGroups.put(ByteBuffer.wrap(startEndKeys.getFirst()[idx]), item);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return null;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * Attempts to do an atomic load of many hfiles into a region.  If it fails,<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   * it returns a list of hfiles that need to be retried.  If it is successful<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * it will return an empty list.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   *<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * NOTE: To maintain row atomicity guarantees, region server callable should<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * succeed atomically and fails atomically.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   *<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * Protected for testing.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @return empty list if success, list of items to retry on recoverable<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * failure<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  protected List&lt;LoadQueueItem&gt; tryAtomicRegionLoad(final Connection conn,<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      final TableName tableName, final byte[] first, final Collection&lt;LoadQueueItem&gt; lqis)<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  throws IOException {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; famPaths =<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;(lqis.size());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    for (LoadQueueItem lqi : lqis) {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      famPaths.add(Pair.newPair(lqi.family, lqi.hfilePath.toString()));<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final RegionServerCallable&lt;Boolean&gt; svrCallable =<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        new RegionServerCallable&lt;Boolean&gt;(conn, tableName, first) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      @Override<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      public Boolean call(int callTimeout) throws Exception {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        SecureBulkLoadClient secureClient = null;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        boolean success = false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span>        try {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("Going to connect to server " + getLocation() + " for row "<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              + Bytes.toStringBinary(getRow()) + " with hfile group " + famPaths);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>          byte[] regionName = getLocation().getRegionInfo().getRegionName();<a name="line.788"></a>
-<span class="sourceLineNo">789</span>          if (!isSecureBulkLoadEndpointAvailable()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            success = ProtobufUtil.bulkLoadHFile(getStub(), famPaths, regionName, assignSeqIds);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>          } else {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            try (Table table = conn.getTable(getTableName())) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>              secureClient = new SecureBulkLoadClient(table);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              success = secureClient.bulkLoadHFiles(famPaths, fsDelegationToken.getUserToken(),<a name="line.794"></a>
-<span class="sourceLineNo">795</span>                bulkToken, getLocation().getRegionInfo().getStartKey());<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          }<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          return success;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        } finally {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          //Best effort copying of files that might not have been imported<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          //from the staging directory back to original location<a name="line.801"></a>
-<span class="sourceLineNo">802</span>          //in user directory<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          if(secureClient != null &amp;&amp; !success) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            FileSystem targetFs = FileSystem.get(getConf());<a name="line.804"></a>
-<span class="sourceLineNo">805</span>         // fs is the source filesystem<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if(fs == null) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              fs = lqis.iterator().next().hfilePath.getFileSystem(getConf());<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span>            // Check to see if the source and target filesystems are the same<a name="line.809"></a>
-<span class="sourceLineNo">810</span>            // If they are the same filesystem, we will try move the files back<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            // because previously we moved them to the staging directory.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>            if (FSHDFSUtils.isSameHdfs(getConf(), fs, targetFs)) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>              for(Pair&lt;byte[], String&gt; el : famPaths) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                Path hfileStagingPath = null;<a name="line.814"></a>
-<span class="sourceLineNo">815</span>                Path hfileOrigPath = new Path(el.getSecond());<a name="line.815"></a>
-<span class="sourceLineNo">816</span>                try {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>                  hfileStagingPath= new Path(secureClient.getStagingPath(bulkToken, el.getFirst()),<a name="line.817"></a>
-<span class="sourceLineNo">818</span>                    hfileOrigPath.getName());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>                  if(targetFs.rename(hfileStagingPath, hfileOrigPath)) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>                    LOG.debug("Moved back file " + hfileOrigPath + " from " +<a name="line.820"></a>
-<span class="sourceLineNo">821</span>                        hfileStagingPath);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>                  } else if(targetFs.exists(hfileStagingPath)){<a name="line.822"></a>
-<span class="sourceLineNo">823</span>                    LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.823"></a>
-<span class="sourceLineNo">824</span>                        hfileStagingPath);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>                  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>                } catch(Exception ex) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>                  LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.827"></a>
-<span class="sourceLineNo">828</span>                      hfileStagingPath, ex);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>                }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>              }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>            }<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          }<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    };<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>    try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      List&lt;LoadQueueItem&gt; toRetry = new ArrayList&lt;LoadQueueItem&gt;();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      Configuration conf = getConf();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      boolean success = RpcRetryingCallerFactory.instantiate(conf,<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          null).&lt;Boolean&gt; newCaller()<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          .callWithRetries(svrCallable, Integer.MAX_VALUE);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      if (!success) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        LOG.warn("Attempt to bulk load region containing "<a name="line.844"></a>
-<span class="sourceLineNo">845</span>            + Bytes.toStringBinary(first) + " into table "<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            + tableName  + " with files " + lqis<a name="line.846"></a>
-<span class="sourceLineNo">847</span>            + " failed.  This is recoverable and they will be retried.");<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        toRetry.addAll(lqis); // return lqi's to retry<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // success<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      return toRetry;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    } catch (IOException e) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      LOG.error("Encountered unrecoverable error from region server, additional details: "<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          + svrCallable.getExceptionMessageAdditionalDetail(), e);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>  }<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span>  private boolean isSecureBulkLoadEndpointAvailable() {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    String classes = getConf().get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, "");<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    return classes.contains("org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint");<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>  /**<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * Split a storefile into a top and bottom half, maintaining<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * the metadata, recreating bloom filters, etc.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   */<a name="line.867"></a>
-<span class="sourceLineNo">868</span>  static void splitStoreFile(<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      Configuration conf, Path inFile,<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      HColumnDescriptor familyDesc, byte[] splitKey,<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      Path bottomOut, Path topOut) throws IOException<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    // Open reader with no block cache, and not in-memory<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    Reference topReference = Reference.createTopReference(splitKey);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    Reference bottomReference = Reference.createBottomReference(splitKey);<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    copyHFileHalf(conf, inFile, topOut, topReference, familyDesc);<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    copyHFileHalf(conf, inFile, bottomOut, bottomReference, familyDesc);<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  }<a name="line.879"></a>
-<span class="sourceLineNo">880</span><a name="line.880"></a>
-<span class="sourceLineNo">881</span>  /**<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * Copy half of an HFile into a new HFile.<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   */<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private static void copyHFileHalf(<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      Configuration conf, Path inFile, Path outFile, Reference reference,<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      HColumnDescriptor familyDescriptor)<a name="line.886"></a>
-<span class="sourceLineNo">887</span>  throws IOException {<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    FileSystem fs = inFile.getFileSystem(conf);<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    CacheConfig cacheConf = new CacheConfig(conf);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    HalfStoreFileReader halfReader = null;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    StoreFile.Writer halfWriter = null;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    try {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      halfReader = new HalfStoreFileReader(fs, inFile, cacheConf, reference, conf);<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      Map&lt;byte[], byte[]&gt; fileInfo = halfReader.loadFileInfo();<a name="line.894"></a>
-<span class="sourceLineNo">895</span><a name="line.895"></a>
-<span class="sourceLineNo">896</span>      int blocksize = familyDescriptor.getBlocksize();<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      Algorithm compression = familyDescriptor.getCompressionType();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      BloomType bloomFilterType = familyDescriptor.getBloomFilterType();<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      HFileContext hFileContext = new HFileContextBuilder()<a name="line.899"></a>
-<span class="sourceLineNo">900</span>                                  .withCompression(compression)<a name="line.900"></a>
-<span class="sourceLineNo">901</span>                                  .withChecksumType(HStore.getChecksumType(conf))<a name="line.901"></a>
-<span class="sourceLineNo">902</span>                                  .withBytesPerCheckSum(HStore.getBytesPerChecksum(conf))<a name="line.902"></a>
-<span class="sourceLineNo">903</span>                                  .withBlockSize(blocksize)<a name="line.903"></a>
-<span class="sourceLineNo">904</span>                                  .withDataBlockEncoding(familyDescriptor.getDataBlockEncoding())<a name="line.904"></a>
-<span class="sourceLineNo">905</span>                                  .build();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      halfWriter = new StoreFile.WriterBuilder(conf, cacheConf,<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          fs)<a name="line.907"></a>
-<span class="sourceLineNo">908</span>              .withFilePath(outFile)<a name="line.908"></a>
-<span class="sourceLineNo">909</span>              .withBloomType(bloomFilterType)<a name="line.909"></a>
-<span class="sourceLineNo">910</span>              .withFileContext(hFileContext)<a name="line.910"></a>
-<span class="sourceLineNo">911</span>              .build();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      HFileScanner scanner = halfReader.getScanner(false, false, false);<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      scanner.seekTo();<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      do {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>        halfWriter.append(scanner.getCell());<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      } while (scanner.next());<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>      for (Map.Entry&lt;byte[],byte[]&gt; entry : fileInfo.entrySet()) {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        if (shouldCopyHFileMetaKey(entry.getKey())) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>          halfWriter.appendFileInfo(entry.getKey(), entry.getValue());<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    } finally {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      if (halfWriter != null) halfWriter.close();<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      if (halfReader != null) halfReader.close(cacheConf.shouldEvictOnClose());<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    }<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  private static boolean shouldCopyHFileMetaKey(byte[] key) {<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return !HFile.isReservedFileInfoKey(key);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  /*<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * Infers region boundaries for a new table.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * Parameter:<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   *   bdryMap is a map between keys to an integer belonging to {+1, -1}<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   *     If a key is a start key of a file, then it maps to +1<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   *     If a key is an end key of a file, then it maps to -1<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * Algo:<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * 1) Poll on the keys in order:<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   *    a) Keep adding the mapped values to these keys (runningSum)<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   *    b) Each time runningSum reaches 0, add the start Key from when the runningSum had started to<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   *       a boundary list.<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * 2) Return the boundary list.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   */<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  public static byte[][] inferBoundaries(TreeMap&lt;byte[], Integer&gt; bdryMap) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    ArrayList&lt;byte[]&gt; keysArray = new ArrayList&lt;byte[]&gt;();<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    int runningValue = 0;<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    byte[] currStartKey = null;<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    boolean firstBoundary = true;<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>    for (Map.Entry&lt;byte[], Integer&gt; item: bdryMap.entrySet()) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      if (runningValue == 0) currStartKey = item.getKey();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      runningValue += item.getValue();<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      if (runningValue == 0) {<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        if (!firstBoundary) keysArray.add(currStartKey);<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        firstBoundary = false;<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      }<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    return keysArray.toArray(new byte[0][0]);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  }<a name="line.962"></a>
-<span class="sourceLineNo">963</span><a name="line.963"></a>
-<span class="sourceLineNo">964</span>  /*<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   * If the table is created for the first time, then "completebulkload" reads the files twice.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>   * More modifications necessary if we want to avoid doing it.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>   */<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  private void createTable(TableName tableName, String dirPath, Admin admin) throws Exception {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    final Path hfofDir = new Path(dirPath);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    final FileSystem fs = hfofDir.getFileSystem(getConf());<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // Add column families<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Build a set of keys<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    final HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    final TreeMap&lt;byte[], Integer&gt; map = new TreeMap&lt;byte[], Integer&gt;(Bytes.BYTES_COMPARATOR);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    visitBulkHFiles(fs, hfofDir, new BulkHFileVisitor&lt;HColumnDescriptor&gt;() {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      @Override<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      public HColumnDescriptor bulkFamily(final byte[] familyName) {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        HColumnDescriptor hcd = new HColumnDescriptor(familyName);<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        htd.addFamily(hcd);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        return hcd;<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      @Override<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      public void bulkHFile(final HColumnDescriptor hcd, final FileStatus hfileStatus)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          throws IOException {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        Path hfile = hfileStatus.getPath();<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        HFile.Reader reader = HFile.createReader(fs, hfile,<a name="line.987"></a>
-<span class="sourceLineNo">988</span>            new CacheConfig(getConf()), getConf());<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>          if (hcd.getCompressionType() != reader.getFileContext().getCompression()) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            hcd.setCompressionType(reader.getFileContext().getCompression());<a name="line.991"></a>
-<span class="sourceLineNo">992</span>            LOG.info("Setting compression " + hcd.getCompressionType().name() +<a name="line.992"></a>
-<span class="sourceLineNo">993</span>                     " for family " + hcd.toString());<a name="line.993"></a>
-<span class="sourceLineNo">994</span>          }<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          reader.loadFileInfo();<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          byte[] first = reader.getFirstRowKey();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          byte[] last  = reader.getLastRowKey();<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>          LOG.info("Trying to figure out region boundaries hfile=" + hfile +<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            " first=" + Bytes.toStringBinary(first) +<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>            " last="  + Bytes.toStringBinary(last));<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span><a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          // To eventually infer start key-end key boundaries<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>          Integer value = map.containsKey(first)? map.get(first):0;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>          map.put(first, value+1);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          value = map.containsKey(last)? map.get(last):0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>          map.put(last, value-1);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        } finally {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          reader.close();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    });<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    byte[][] keys = LoadIncrementalHFiles.inferBoundaries(map);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    admin.createTable(htd, keys);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    LOG.info("Table "+ tableName +" is available!!");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @Override<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public int run(String[] args) throws Exception {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    if (args.length != 2) {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      usage();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>      return -1;<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    }<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span><a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    initialize();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    try (Connection connection = ConnectionFactory.createConnection(getConf());<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        Admin admin = connection.getAdmin()) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      String dirPath = args[0];<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      TableName tableName = TableName.valueOf(args[1]);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span><a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      boolean tableExists = admin.tableExists(tableName);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      if (!tableExists) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        if ("yes".equalsIgnoreCase(getConf().get(CREATE_TABLE_CONF_KEY, "yes"))) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>          this.createTable(tableName, dirPath, admin);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        } else {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>          String errorMsg = format("Table '%s' does not exist.", tableName);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>          LOG.error(errorMsg);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>          throw new TableNotFoundException(errorMsg);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      Path hfofDir = new Path(dirPath);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      try (Table table = connection.getTable(tableName);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          RegionLocator locator = connection.getRegionLocator(tableName)) {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          doBulkLoad(hfofDir, admin, table, locator);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    return 0;<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  public static void main(String[] args) throws Exception {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    Configuration conf = HBaseConfiguration.create();<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    int ret = ToolRunner.run(conf, new LoadIncrementalHFiles(), args);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    System.exit(ret);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>  }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  /**<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   * Called from replication sink, where it manages bulkToken(staging directory) by itself. This is<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   * used only when {@link SecureBulkLoadEndpoint} is configured in hbase.coprocessor.region.classes<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * property. This directory is used as a temporary directory where all files are initially<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   * copied/moved from user given directory, set all the required file permissions and then from<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>   * their it is finally loaded into a table. This should be set only when, one would like to manage<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>   * the staging directory by itself. Otherwise this tool will handle this by itself.<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * @param stagingDir staging directory path<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   */<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  public void setBulkToken(String stagingDir) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    this.bulkToken = stagingDir;<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>  }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span><a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>}<a name="line.1075"></a>
+<span class="sourceLineNo">428</span>   * @param validateHFile if true hfiles will be validated for its format<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException If any I/O or network error occurred<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public void prepareHFileQueue(Path hfilesDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      boolean validateHFile) throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    discoverLoadQueue(queue, hfilesDir, validateHFile);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private ExecutorService createExecutorService() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return pool;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      throws IOException {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    for (HColumnDescriptor family : families) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      familyNames.add(family.getNameAsString());<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    while (queueIter.hasNext()) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LoadQueueItem lqi = queueIter.next();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unmatchedFamilies.add(familyNameInHFile);<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>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      String msg =<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.468"></a>
+<span class="sourceLineNo">469</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              + familyNames;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      LOG.error(msg);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      throw new IOException(msg);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * {@link<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param table Table to which these hfiles should be loaded to<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @param conn Connection to use<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    ExecutorService pool = null;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    try {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      pool = createExecutorService();<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } finally {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      if (pool != null) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>        pool.shutdown();<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>  }<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>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * them.  Any failures are re-queued for another pass with the<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * groupOrSplitPhase.<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    // atomically bulk load the groups.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      final byte[] first = e.getKey().array();<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.518"></a>
+<span class="sourceLineNo">519</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return toRetry;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      };<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      try {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>        // LQIs that are requeued to be regrouped.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        queue.addAll(toRetry);<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>      } catch (ExecutionException e1) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        Throwable t = e1.getCause();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        if (t instanceof IOException) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          // At this point something unrecoverable has happened.<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          // TODO Implement bulk load recovery<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        throw new IllegalStateException(t);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (InterruptedException e1) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (Entry&lt;ByteBuffer,<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      for (LoadQueueItem lqi: lqis) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>        if (count == null) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          count = new MutableInt();<a name="line.559"></a>
+<span class="sourceLineNo">560</span>          filesMap.put(lqi.family, count);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>        }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>        count.increment();<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.563"></a>
+<span class="sourceLineNo">564</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.564"></a>
+<span class="sourceLineNo">565</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.565"></a>
+<span class="sourceLineNo">566</span>            + " of region with start key "<a name="line.566"></a>
+<span class="sourceLineNo">567</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.567"></a>
+<span class="sourceLineNo">568</span>          return false;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>        }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    return true;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    // phase because of the puts that happen in futures.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>    // drain LQIs and figure out bulk load groups<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    while (!queue.isEmpty()) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      final LoadQueueItem item = queue.remove();<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>          return splits;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        }<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      };<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      splittingFutures.add(pool.submit(call));<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    // get all the results.  All grouping and splitting must finish before<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    // we can attempt the atomic loads.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        if (splits != null) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>          queue.addAll(splits);<a name="line.606"></a>
+<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      } catch (ExecutionException e1) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>        Throwable t = e1.getCause();<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        if (t instanceof IOException) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          LOG.error("IOException during splitting", e1);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
+<span class="sourceLineNo">614</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        throw new IllegalStateException(t);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      } catch (InterruptedException e1) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return regionGroups;<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>  // unique file name for the table<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private String getUniqueName() {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.626"></a>
+<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      final Table table, byte[] startKey,<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      byte[] splitKey) throws IOException {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    final Path hfilePath = item.hfilePath;<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    // above.<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    final String TMP_DIR 

<TRUNCATED>

[24/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 feed20b..abb8a15 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
@@ -31,2767 +31,2812 @@
 <span class="sourceLineNo">023</span>import java.net.BindException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.net.InetSocketAddress;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.net.UnknownHostException;<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.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Iterator;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map.Entry;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Set;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.TreeSet;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.commons.logging.Log;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.logging.LogFactory;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.Cell;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.HConstants;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.ServerName;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.TableName;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.Append;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Get;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Put;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.security.User;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.zookeeper.KeeperException;<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>import com.google.common.annotations.VisibleForTesting;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import com.google.protobuf.ByteString;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import com.google.protobuf.Message;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import com.google.protobuf.RpcController;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import com.google.protobuf.ServiceException;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.192"></a>
-<span class="sourceLineNo">193</span> */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>@InterfaceAudience.Private<a name="line.194"></a>
-<span class="sourceLineNo">195</span>@SuppressWarnings("deprecation")<a name="line.195"></a>
-<span class="sourceLineNo">196</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    ConfigurationObserver {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /** RPC scheduler to use for the region server. */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  final Counter requestCount = new Counter();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  // Server to handle client requests.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  final RpcServerInterface rpcServer;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  final InetSocketAddress isa;<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  private final HRegionServer regionServer;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  private final long maxScannerResultSize;<a name="line.224"></a>
+<span class="sourceLineNo">026</span>import java.nio.ByteBuffer;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.HashMap;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Map.Entry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.NavigableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Set;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.TreeSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.commons.logging.Log;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.commons.logging.LogFactory;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.conf.Configuration;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ByteBufferedCell;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.Cell;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.CellScannable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.DroppedSnapshotException;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HConstants;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.ServerName;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.UnknownScannerException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Append;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ConnectionUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Get;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Result;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.VersionInfoUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.conf.ConfigurationObserver;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.exceptions.FailedSanityCheckException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.exceptions.OperationConflictException;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.exceptions.OutOfOrderScannerNextException;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.filter.ByteArrayComparable;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.ipc.PriorityFunction;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.ipc.QosPriority;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.ipc.RpcCallContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.ipc.RpcCallback;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.ipc.RpcServer.BlockingServiceAndInterface;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.ipc.RpcServerInterface;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.ipc.ServerRpcController;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.master.MasterRpcServices;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.protobuf.RequestConverter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.protobuf.ResponseConverter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionResponse;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionResponse;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionResponse;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRequest;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoRequest;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetServerInfoResponse;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileRequest;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetStoreFileResponse;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsRequest;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsResponse;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest.RegionOpenInfo;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionResponse.RegionOpeningState;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryRequest;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ReplicateWALEntryResponse;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionResponse;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerResponse;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationRequest;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateConfigurationResponse;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionResponse;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileRequest.FamilyPath;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.BulkLoadHFileResponse;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Condition;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceRequest;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceResponse;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetRequest;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.GetResponse;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiResponse;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateResponse;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionActionResult;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ResultOrException;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameInt64Pair;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionInfo;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.protobuf.generated.MapReduceProtos.ScanMetrics;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.FlushDescriptor;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.RegionEventDescriptor;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.quotas.OperationQuota;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.quotas.RegionServerQuotaManager;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.regionserver.HRegion.RegionScannerImpl;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.regionserver.Leases.Lease;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.regionserver.Leases.LeaseStillHeldException;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.regionserver.ScannerContext.LimitScope;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.regionserver.handler.OpenMetaHandler;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.wal.WALEdit;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.security.User;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.util.Counter;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.util.DNS;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.util.ServerRegionReplicaUtil;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.zookeeper.ZKSplitLog;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.zookeeper.KeeperException;<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>import com.google.common.annotations.VisibleForTesting;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import com.google.protobuf.ByteString;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import com.google.protobuf.Message;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import com.google.protobuf.RpcController;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import com.google.protobuf.ServiceException;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import com.google.protobuf.TextFormat;<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> * Implements the regionserver RPC services.<a name="line.195"></a>
+<span class="sourceLineNo">196</span> */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>@InterfaceAudience.Private<a name="line.197"></a>
+<span class="sourceLineNo">198</span>@SuppressWarnings("deprecation")<a name="line.198"></a>
+<span class="sourceLineNo">199</span>public class RSRpcServices implements HBaseRPCErrorHandler,<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    AdminService.BlockingInterface, ClientService.BlockingInterface, PriorityFunction,<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    ConfigurationObserver {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  protected static final Log LOG = LogFactory.getLog(RSRpcServices.class);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>  /** RPC scheduler to use for the region server. */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public static final String REGION_SERVER_RPC_SCHEDULER_FACTORY_CLASS =<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    "hbase.region.server.rpc.scheduler.factory.class";<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>   * Minimum allowable time limit delta (in milliseconds) that can be enforced during scans. This<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * configuration exists to prevent the scenario where a time limit is specified to be so<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * restrictive that the time limit is reached immediately (before any cells are scanned).<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private static final String REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA =<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "hbase.region.server.rpc.minimum.scan.time.limit.delta";<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * Default value of {@link RSRpcServices#REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA}<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  private static final long DEFAULT_REGION_SERVER_RPC_MINIMUM_SCAN_TIME_LIMIT_DELTA = 10;<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  // Request counter. (Includes requests that are not serviced by regions.)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  final Counter requestCount = new Counter();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  // Server to handle client requests.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  final RpcServerInterface rpcServer;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  final InetSocketAddress isa;<a name="line.224"></a>
 <span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  // The reference to the priority extraction function<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  private final PriorityFunction priority;<a name="line.227"></a>
+<span class="sourceLineNo">226</span>  private final HRegionServer regionServer;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  private final long maxScannerResultSize;<a name="line.227"></a>
 <span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  /**<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  private final int scannerLeaseTimeoutPeriod;<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * The RPC timeout period (milliseconds)<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private final int rpcTimeout;<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The minimum allowable delta to use for the scan limit<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  private final long minimumScanTimeLimitDelta;<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>   * An Rpc callback for closing a RegionScanner.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    private final RegionScanner scanner;<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      this.scanner = scanner;<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>    @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    public void run() throws IOException {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      this.scanner.close();<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>  /**<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    private final String scannerName;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    private final RegionScanner scanner;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final Lease lease;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      this.scannerName = scannerName;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      this.scanner = scanner;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      this.lease = lease;<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>    @Override<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    public void run() throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.scanner.shipped();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (scanners.containsKey(scannerName)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * completion of multiGets.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    public void addScanner(RegionScanner scanner) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.scanners.add(scanner);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    @Override<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    public void run() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      for (RegionScanner scanner : scanners) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          scanner.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private static class RegionScannerHolder {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    private RegionScanner s;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    private Region r;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final RpcCallback closeCallBack;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final RpcCallback shippedCallback;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        RpcCallback shippedCallback) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.s = s;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.r = r;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.closeCallBack = closeCallBack;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.shippedCallback = shippedCallback;<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 getNextCallSeq() {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      return nextCallSeq.get();<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 void incNextCallSeq() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      nextCallSeq.incrementAndGet();<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 rollbackNextCallSeq() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      nextCallSeq.decrementAndGet();<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><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * closed<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private class ScannerListener implements LeaseListener {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    private final String scannerName;<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    ScannerListener(final String n) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      this.scannerName = n;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public void leaseExpired() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (rsh != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        RegionScanner s = rsh.s;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        try {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>          }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          s.close();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        } catch (IOException e) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          LOG.error("Closing scanner for "<a name="line.373"></a>
-<span class="sourceLineNo">374</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      } else {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        LOG.warn("Scanner " + this.scannerName + " lease expired, but no related" +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " scanner found, hence no chance to close that related scanner!");<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>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private static ResultOrException getResultOrException(<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      final ClientProtos.Result r, final int index, final ClientProtos.RegionLoadStats stats) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return getResultOrException(ResponseConverter.buildActionResult(r, stats), index);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private static ResultOrException getResultOrException(final Exception e, final int index) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return getResultOrException(ResponseConverter.buildActionResult(e), index);<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>  private static ResultOrException getResultOrException(<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      final ResultOrException.Builder builder, final int index) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return builder.setIndex(index).build();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  /**<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * Starts the nonce operation for a mutation, if needed.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * @param mutation Mutation.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * @param nonceGroup Nonce group from the request.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * @returns Nonce used (can be NO_NONCE).<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  private long startNonceOperation(final MutationProto mutation, long nonceGroup)<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      throws IOException, OperationConflictException {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    if (regionServer.nonceManager == null || !mutation.hasNonce()) return HConstants.NO_NONCE;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    boolean canProceed = false;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    try {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      canProceed = regionServer.nonceManager.startOperation(<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        nonceGroup, mutation.getNonce(), regionServer);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    } catch (InterruptedException ex) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throw new InterruptedIOException("Nonce start operation interrupted");<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    if (!canProceed) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      // TODO: instead, we could convert append/increment to get w/mvcc<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      String message = "The operation with nonce {" + nonceGroup + ", " + mutation.getNonce()<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        + "} on row [" + Bytes.toString(mutation.getRow().toByteArray())<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        + "] may have already completed";<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      throw new OperationConflictException(message);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    return mutation.getNonce();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * Ends nonce operation for a mutation, if needed.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @param mutation Mutation.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @param nonceGroup Nonce group from the request. Always 0 in initial implementation.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @param success Whether the operation for this nonce has succeeded.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private void endNonceOperation(final MutationProto mutation,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      long nonceGroup, boolean success) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (regionServer.nonceManager != null &amp;&amp; mutation.hasNonce()) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      regionServer.nonceManager.endOperation(nonceGroup, mutation.getNonce(), success);<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><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return True if current call supports cellblocks<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private boolean isClientCellBlockSupport() {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    RpcCallContext context = RpcServer.getCurrentCall();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  private boolean isClientCellBlockSupport(RpcCallContext context) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    return context != null &amp;&amp; context.isClientCellBlockSupported();<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>  private void addResult(final MutateResponse.Builder builder, final Result result,<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      final PayloadCarryingRpcController rpcc) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    if (result == null) return;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (isClientCellBlockSupport()) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      builder.setResult(ProtobufUtil.toResultNoData(result));<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      rpcc.setCellScanner(result.cellScanner());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      ClientProtos.Result pbr = ProtobufUtil.toResult(result);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      builder.setResult(pbr);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private void addResults(final ScanResponse.Builder builder, final List&lt;Result&gt; results,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      final RpcController controller, boolean isDefaultRegion, boolean clientCellBlockSupported) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    builder.setStale(!isDefaultRegion);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    if (results == null || results.isEmpty()) return;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    if (clientCellBlockSupported) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      for (Result res : results) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        builder.addCellsPerResult(res.size());<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        builder.addPartialFlagPerResult(res.isPartial());<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      ((PayloadCarryingRpcController)controller).<a name="line.469"></a>
-<span class="sourceLineNo">470</span>        setCellScanner(CellUtil.createCellScanner(results));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    } else {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      for (Result res: results) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        ClientProtos.Result pbr = ProtobufUtil.toResult(res);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        builder.addResults(pbr);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  }<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>   * Mutate a list of rows atomically.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   *<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param region<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param actions<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param cellScanner if non-null, the mutation data -- the Cell content.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @throws IOException<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private ClientProtos.RegionLoadStats mutateRows(final Region region,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      final List&lt;ClientProtos.Action&gt; actions,<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      final CellScanner cellScanner) throws IOException {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (!region.getRegionInfo().isMetaTable()) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      regionServer.cacheFlusher.reclaimMemStoreMemory();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    RowMutations rm = null;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    for (ClientProtos.Action action: actions) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      if (action.hasGet()) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        throw new DoNotRetryIOException("Atomic put and/or delete only, not a Get=" +<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          action.getGet());<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      MutationType type = action.getMutation().getMutateType();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (rm == null) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        rm = new RowMutations(action.getMutation().getRow().toByteArray());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      switch (type) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        case PUT:<a name="line.504"></a>
-<span class="sourceLineNo">505</span>          rm.add(ProtobufUtil.toPut(action.getMutation(), cellScanner));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>          break;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        case DELETE:<a name="line.507"></a>
-<span class="sourceLineNo">508</span>          rm.add(ProtobufUtil.toDelete(action.getMutation(), cellScanner));<a name="line.508"></a>
+<span class="sourceLineNo">229</span>  // The reference to the priority extraction function<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private final PriorityFunction priority;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  private final AtomicLong scannerIdGen = new AtomicLong(0L);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private final ConcurrentHashMap&lt;String, RegionScannerHolder&gt; scanners =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    new ConcurrentHashMap&lt;String, RegionScannerHolder&gt;();<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * The lease timeout period for client scanners (milliseconds).<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private final int scannerLeaseTimeoutPeriod;<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>   * The RPC timeout period (milliseconds)<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  private final int rpcTimeout;<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>   * The minimum allowable delta to use for the scan limit<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  private final long minimumScanTimeLimitDelta;<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * An Rpc callback for closing a RegionScanner.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>   static class RegionScannerCloseCallBack implements RpcCallback {<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    private final RegionScanner scanner;<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    public RegionScannerCloseCallBack(RegionScanner scanner){<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      this.scanner = scanner;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>    @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public void run() throws IOException {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      this.scanner.close();<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * An Rpc callback for doing shipped() call on a RegionScanner.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private class RegionScannerShippedCallBack implements RpcCallback {<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>    private final String scannerName;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    private final RegionScanner scanner;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    private final Lease lease;<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    public RegionScannerShippedCallBack(String scannerName, RegionScanner scanner, Lease lease) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.scannerName = scannerName;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.scanner = scanner;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.lease = lease;<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      this.scanner.shipped();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // We're done. On way out re-add the above removed lease. The lease was temp removed for this<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      // Rpc call and we are at end of the call now. Time to add it back.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (scanners.containsKey(scannerName)) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        if (lease != null) regionServer.leases.addLease(lease);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<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><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * An RpcCallBack that creates a list of scanners that needs to perform callBack operation on<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   * completion of multiGets.<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   static class RegionScannersCloseCallBack implements RpcCallback {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private final List&lt;RegionScanner&gt; scanners = new ArrayList&lt;RegionScanner&gt;();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public void addScanner(RegionScanner scanner) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      this.scanners.add(scanner);<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>    @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (RegionScanner scanner : scanners) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        try {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          scanner.close();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        } catch (IOException e) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          LOG.error("Exception while closing the scanner " + scanner, e);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  private static class RegionScannerHolder {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    private AtomicLong nextCallSeq = new AtomicLong(0);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    private RegionScanner s;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private Region r;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final RpcCallback closeCallBack;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final RpcCallback shippedCallback;<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    public RegionScannerHolder(RegionScanner s, Region r, RpcCallback closeCallBack,<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        RpcCallback shippedCallback) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.s = s;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.r = r;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.closeCallBack = closeCallBack;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.shippedCallback = shippedCallback;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>    private long getNextCallSeq() {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      return nextCallSeq.get();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    private void incNextCallSeq() {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      nextCallSeq.incrementAndGet();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>    private void rollbackNextCallSeq() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      nextCallSeq.decrementAndGet();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * Instantiated as a scanner lease. If the lease times out, the scanner is<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * closed<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private class ScannerListener implements LeaseListener {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private final String scannerName;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    ScannerListener(final String n) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      this.scannerName = n;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public void leaseExpired() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      RegionScannerHolder rsh = scanners.remove(this.scannerName);<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (rsh != null) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        RegionScanner s = rsh.s;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        LOG.info("Scanner " + this.scannerName + " lease expired on region "<a name="line.364"></a>
+<span class="sourceLineNo">365</span>          + s.getRegionInfo().getRegionNameAsString());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        try {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          Region region = regionServer.getRegion(s.getRegionInfo().getRegionName());<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>            region.getCoprocessorHost().preScannerClose(s);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          s.close();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (region != null &amp;&amp; region.getCoprocessorHost() != null) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            region.getCoprocessorHost().postScannerClose(s);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        } catch (IOException e) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>          LOG.error("Closing scanner for "<a name="line.376"></a>
+<span class="sourceLineNo">377</span>            + s.getRegionInfo().getRegionNameAsString(), e);<a n

<TRUNCATED>

[34/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
index f818a84..33c3cf4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ipc/RpcServer.Connection.html
@@ -327,2322 +327,2333 @@
 <span class="sourceLineNo">319</span>    private RpcCallback callback;<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>    private long responseCellSize = 0;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    private boolean retryImmediatelySupported;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.325"></a>
-<span class="sourceLineNo">326</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      this.id = id;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      this.service = service;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      this.md = md;<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      this.header = header;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      this.param = param;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      this.cellScanner = cellScanner;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.timestamp = System.currentTimeMillis();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.response = null;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.delayResponse = false;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.responder = responder;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      this.isError = false;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      this.size = size;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.tinfo = tinfo;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      this.user = connection.user;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      this.remoteAddress = remoteAddress;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<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>    /**<a name="line.346"></a>
-<span class="sourceLineNo">347</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.347"></a>
-<span class="sourceLineNo">348</span>     * cleanup.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>     */<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    void done() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (this.cellBlock != null) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        // Return buffer to reservoir now we are done with it.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        reservoir.putBuffer(this.cellBlock);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        this.cellBlock = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public String toString() {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      return toShortString() + " param: " +<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        " connection: " + connection.toString();<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>    protected RequestHeader getHeader() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      return this.header;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>    /*<a name="line.370"></a>
-<span class="sourceLineNo">371</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.371"></a>
-<span class="sourceLineNo">372</span>     * the payload of a command<a name="line.372"></a>
-<span class="sourceLineNo">373</span>     */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    String toShortString() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      String serviceName = this.connection.service != null ?<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          " connection: " + connection.toString();<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>    String toTraceString() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      String serviceName = this.connection.service != null ?<a name="line.384"></a>
-<span class="sourceLineNo">385</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      return serviceName + "." + methodName;<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>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      this.response = new BufferChain(response);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        Throwable t, String errorMsg) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      if (this.isError) return;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      if (t != null) this.isError = true;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      BufferChain bc = null;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      try {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        // Presume it a pb Message.  Could be null.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        Message result = (Message)m;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        // Call id.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        headerBuilder.setCallId(this.id);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        if (t != null) {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          if (t instanceof RegionMovedException) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            // any kind of payload.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.415"></a>
-<span class="sourceLineNo">416</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.416"></a>
-<span class="sourceLineNo">417</span>          }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>          // Set the exception as the result of the method invocation.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.419"></a>
-<span class="sourceLineNo">420</span>        }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        if (this.cellBlock != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        Message header = headerBuilder.build();<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // one big byte array; save on allocations.<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.438"></a>
-<span class="sourceLineNo">439</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        if (connection.useWrap) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          bc = wrapWithSasl(bc);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      } catch (IOException e) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        LOG.warn("Exception while creating response " + e);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      this.response = bc;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (this.callback != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        try {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          this.callback.run();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } catch (Exception e) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          // Don't allow any exception here to kill this handler thread.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        throws IOException {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (!this.connection.useSasl) return bc;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      // THIS IS A BIG UGLY COPY.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      byte [] responseBytes = bc.getBytes();<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      byte [] token;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      // synchronization may be needed since there can be multiple Handler<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      // threads using saslServer to wrap responses.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      synchronized (connection.saslServer) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      if (LOG.isTraceEnabled()) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.474"></a>
-<span class="sourceLineNo">475</span>            + " as call response.");<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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 synchronized void endDelay(Object result) throws IOException {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      assert this.delayResponse;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      assert this.delayReturnValue || result == null;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      this.delayResponse = false;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      delayedCalls.decrementAndGet();<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      if (this.delayReturnValue) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        this.setResponse(result, null, null, null);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      this.responder.doRespond(this);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span><a name="line.494"></a>
-<span class="sourceLineNo">495</span>    @Override<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    public synchronized void endDelay() throws IOException {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      this.endDelay(null);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    @Override<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      assert !this.delayResponse;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      this.delayResponse = true;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      this.delayReturnValue = delayReturnValue;<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      }<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    @Override<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      this.delayResponse = false;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.sendResponseIfReady();<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>    @Override<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public synchronized boolean isDelayed() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      return this.delayResponse;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      return this.delayReturnValue;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>    @Override<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public boolean isClientCellBlockSupported() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    @Override<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    public long disconnectSince() {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!connection.channel.isOpen()) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        return System.currentTimeMillis() - timestamp;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        return -1L;<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><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    public long getSize() {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      return this.size;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    public long getResponseCellSize() {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      return responseCellSize;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>    public void incrementResponseCellSize(long cellSize) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      responseCellSize += cellSize;<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>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * If we have a response, and delay is not set, then respond<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * called by the RPC code in the context of the Handler thread.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      if (!this.delayResponse) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        this.responder.doRespond(this);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      }<a name="line.562"></a>
+<span class="sourceLineNo">322</span>    private long responseBlockSize = 0;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    private boolean retryImmediatelySupported;<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    Call(int id, final BlockingService service, final MethodDescriptor md, RequestHeader header,<a name="line.325"></a>
+<span class="sourceLineNo">326</span>         Message param, CellScanner cellScanner, Connection connection, Responder responder,<a name="line.326"></a>
+<span class="sourceLineNo">327</span>         long size, TraceInfo tinfo, final InetAddress remoteAddress) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      this.id = id;<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      this.service = service;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      this.md = md;<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      this.header = header;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      this.param = param;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      this.cellScanner = cellScanner;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      this.connection = connection;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      this.timestamp = System.currentTimeMillis();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      this.response = null;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      this.delayResponse = false;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      this.responder = responder;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      this.isError = false;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.size = size;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.tinfo = tinfo;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      this.user = connection.user;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      this.remoteAddress = remoteAddress;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.retryImmediatelySupported = connection.retryImmediatelySupported;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>    /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>     * Call is done. Execution happened and we returned results to client. It is now safe to<a name="line.348"></a>
+<span class="sourceLineNo">349</span>     * cleanup.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>     */<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    void done() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (this.cellBlock != null) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        // Return buffer to reservoir now we are done with it.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        reservoir.putBuffer(this.cellBlock);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        this.cellBlock = null;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      this.connection.decRpcCount();  // Say that we're done with this call.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    @Override<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    public String toString() {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      return toShortString() + " param: " +<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        (this.param != null? ProtobufUtil.getShortTextFormat(this.param): "") +<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        " connection: " + connection.toString();<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>    protected RequestHeader getHeader() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return this.header;<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>    /*<a name="line.371"></a>
+<span class="sourceLineNo">372</span>     * Short string representation without param info because param itself could be huge depends on<a name="line.372"></a>
+<span class="sourceLineNo">373</span>     * the payload of a command<a name="line.373"></a>
+<span class="sourceLineNo">374</span>     */<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    String toShortString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      String serviceName = this.connection.service != null ?<a name="line.376"></a>
+<span class="sourceLineNo">377</span>          this.connection.service.getDescriptorForType().getName() : "null";<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return "callId: " + this.id + " service: " + serviceName +<a name="line.378"></a>
+<span class="sourceLineNo">379</span>          " methodName: " + ((this.md != null) ? this.md.getName() : "n/a") +<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          " size: " + StringUtils.TraditionalBinaryPrefix.long2String(this.size, "", 1) +<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          " connection: " + connection.toString();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>    String toTraceString() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String serviceName = this.connection.service != null ?<a name="line.385"></a>
+<span class="sourceLineNo">386</span>                           this.connection.service.getDescriptorForType().getName() : "";<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      String methodName = (this.md != null) ? this.md.getName() : "";<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return serviceName + "." + methodName;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    }<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>    protected synchronized void setSaslTokenResponse(ByteBuffer response) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      this.response = new BufferChain(response);<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>    protected synchronized void setResponse(Object m, final CellScanner cells,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        Throwable t, String errorMsg) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      if (this.isError) return;<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      if (t != null) this.isError = true;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      BufferChain bc = null;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        ResponseHeader.Builder headerBuilder = ResponseHeader.newBuilder();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // Presume it a pb Message.  Could be null.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Message result = (Message)m;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        // Call id.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        headerBuilder.setCallId(this.id);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        if (t != null) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          exceptionBuilder.setExceptionClassName(t.getClass().getName());<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          exceptionBuilder.setStackTrace(errorMsg);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          if (t instanceof RegionMovedException) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            // Special casing for this exception.  This is only one carrying a payload.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            // Do this instead of build a generic system for allowing exceptions carry<a name="line.413"></a>
+<span class="sourceLineNo">414</span>            // any kind of payload.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            RegionMovedException rme = (RegionMovedException)t;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>            exceptionBuilder.setHostname(rme.getHostname());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>            exceptionBuilder.setPort(rme.getPort());<a name="line.417"></a>
+<span class="sourceLineNo">418</span>          }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // Set the exception as the result of the method invocation.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          headerBuilder.setException(exceptionBuilder.build());<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        }<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        // Pass reservoir to buildCellBlock. Keep reference to returne so can add it back to the<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        // reservoir when finished. This is hacky and the hack is not contained but benefits are<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // high when we can avoid a big buffer allocation on each rpc.<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        this.cellBlock = ipcUtil.buildCellBlock(this.connection.codec,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          this.connection.compressionCodec, cells, reservoir);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        if (this.cellBlock != null) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          CellBlockMeta.Builder cellBlockBuilder = CellBlockMeta.newBuilder();<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          // Presumes the cellBlock bytebuffer has been flipped so limit has total size in it.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          cellBlockBuilder.setLength(this.cellBlock.limit());<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          headerBuilder.setCellBlockMeta(cellBlockBuilder.build());<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        Message header = headerBuilder.build();<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>        // Organize the response as a set of bytebuffers rather than collect it all together inside<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        // one big byte array; save on allocations.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>        ByteBuffer bbHeader = IPCUtil.getDelimitedMessageAsByteBuffer(header);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        ByteBuffer bbResult = IPCUtil.getDelimitedMessageAsByteBuffer(result);<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        int totalSize = bbHeader.capacity() + (bbResult == null? 0: bbResult.limit()) +<a name="line.439"></a>
+<span class="sourceLineNo">440</span>          (this.cellBlock == null? 0: this.cellBlock.limit());<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        ByteBuffer bbTotalSize = ByteBuffer.wrap(Bytes.toBytes(totalSize));<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        bc = new BufferChain(bbTotalSize, bbHeader, bbResult, this.cellBlock);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        if (connection.useWrap) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          bc = wrapWithSasl(bc);<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.warn("Exception while creating response " + e);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.response = bc;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      // Once a response message is created and set to this.response, this Call can be treated as<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // done. The Responder thread will do the n/w write of this message back to client.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      if (this.callback != null) {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        try {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          this.callback.run();<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        } catch (Exception e) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          // Don't allow any exception here to kill this handler thread.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          LOG.warn("Exception while running the Rpc Callback.", e);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    private BufferChain wrapWithSasl(BufferChain bc)<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        throws IOException {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      if (!this.connection.useSasl) return bc;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // Looks like no way around this; saslserver wants a byte array.  I have to make it one.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // THIS IS A BIG UGLY COPY.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      byte [] responseBytes = bc.getBytes();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      byte [] token;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      // synchronization may be needed since there can be multiple Handler<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      // threads using saslServer to wrap responses.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      synchronized (connection.saslServer) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>        token = connection.saslServer.wrap(responseBytes, 0, responseBytes.length);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      if (LOG.isTraceEnabled()) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>        LOG.trace("Adding saslServer wrapped token of size " + token.length<a name="line.475"></a>
+<span class="sourceLineNo">476</span>            + " as call response.");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>      ByteBuffer bbTokenLength = ByteBuffer.wrap(Bytes.toBytes(token.length));<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      ByteBuffer bbTokenBytes = ByteBuffer.wrap(token);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      return new BufferChain(bbTokenLength, bbTokenBytes);<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>    @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    public synchronized void endDelay(Object result) throws IOException {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      assert this.delayResponse;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      assert this.delayReturnValue || result == null;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      this.delayResponse = false;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      delayedCalls.decrementAndGet();<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      if (this.delayReturnValue) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        this.setResponse(result, null, null, null);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      this.responder.doRespond(this);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    @Override<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    public synchronized void endDelay() throws IOException {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      this.endDelay(null);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span><a name="line.500"></a>
+<span class="sourceLineNo">501</span>    @Override<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    public synchronized void startDelay(boolean delayReturnValue) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      assert !this.delayResponse;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.delayResponse = true;<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      this.delayReturnValue = delayReturnValue;<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      int numDelayed = delayedCalls.incrementAndGet();<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      if (numDelayed &gt; warnDelayedCalls) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        LOG.warn("Too many delayed calls: limit " + warnDelayedCalls + " current " + numDelayed);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      }<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>    @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public synchronized void endDelayThrowing(Throwable t) throws IOException {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      this.setResponse(null, null, t, StringUtils.stringifyException(t));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.delayResponse = false;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      this.sendResponseIfReady();<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>    @Override<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public synchronized boolean isDelayed() {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      return this.delayResponse;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span>    @Override<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    public synchronized boolean isReturnValueDelayed() {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return this.delayReturnValue;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public boolean isClientCellBlockSupported() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      return this.connection != null &amp;&amp; this.connection.codec != null;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>    @Override<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    public long disconnectSince() {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      if (!connection.channel.isOpen()) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>        return System.currentTimeMillis() - timestamp;<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        return -1L;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>    public long getSize() {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      return this.size;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>    public long getResponseCellSize() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return responseCellSize;<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>    public void incrementResponseCellSize(long cellSize) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      responseCellSize += cellSize;<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>    @Override<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    public long getResponseBlockSize() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      return responseBlockSize;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>    @Override<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    public void incrementResponseBlockSize(long blockSize) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>      responseBlockSize += blockSize;<a name="line.562"></a>
 <span class="sourceLineNo">563</span>    }<a name="line.563"></a>
 <span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public UserGroupInformation getRemoteUser() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      return connection.ugi;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>    @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    public User getRequestUser() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      return user;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>    @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    public String getRequestUserName() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      User user = getRequestUser();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      return user == null? null: user.getShortName();<a name="line.577"></a>
+<span class="sourceLineNo">565</span>    /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     * If we have a response, and delay is not set, then respond<a name="line.566"></a>
+<span class="sourceLineNo">567</span>     * immediately.  Otherwise, do not respond to client.  This is<a name="line.567"></a>
+<span class="sourceLineNo">568</span>     * called by the RPC code in the context of the Handler thread.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>     */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    public synchronized void sendResponseIfReady() throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      if (!this.delayResponse) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        this.responder.doRespond(this);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      }<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>    public UserGroupInformation getRemoteUser() {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      return connection.ugi;<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>    @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    public InetAddress getRemoteAddress() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      return remoteAddress;<a name="line.582"></a>
+<span class="sourceLineNo">581</span>    public User getRequestUser() {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      return user;<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>    @Override<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    public VersionInfo getClientVersionInfo() {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return connection.getVersionInfo();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    public void setCallBack(RpcCallback callback) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.callback = callback;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>    @Override<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    public boolean isRetryImmediatelySupported() {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      return retryImmediatelySupported;<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">586</span>    public String getRequestUserName() {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      User user = getRequestUser();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      return user == null? null: user.getShortName();<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>    @Override<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    public InetAddress getRemoteAddress() {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      return remoteAddress;<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span><a name="line.595"></a>
+<span class="sourceLineNo">596</span>    @Override<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    public VersionInfo getClientVersionInfo() {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      return connection.getVersionInfo();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
 <span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  private class Listener extends Thread {<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    private Selector selector = null; //the selector that we use for the server<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    private Reader[] readers = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    private int currentReader = 0;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    private Random rand = new Random();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.609"></a>
-<span class="sourceLineNo">610</span>                                         //-tion (for idle connections) ran<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                                          //two cleanup runs<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    private int backlogLength;<a name="line.613"></a>
+<span class="sourceLineNo">601</span>    @Override<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    public void setCallBack(RpcCallback callback) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      this.callback = callback;<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span>    @Override<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    public boolean isRetryImmediatelySupported() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      return retryImmediatelySupported;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>  /** Listens on the socket. Creates jobs for the handler threads*/<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private class Listener extends Thread {<a name="line.613"></a>
 <span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>    private ExecutorService readPool;<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    public Listener(final String name) throws IOException {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      super(name);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // Create a new server socket and set to non blocking mode<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      acceptChannel = ServerSocketChannel.open();<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      acceptChannel.configureBlocking(false);<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      // create a selector;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      selector= Selector.open();<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>      readers = new Reader[readThreads];<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.633"></a>
-<span class="sourceLineNo">634</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.634"></a>
-<span class="sourceLineNo">635</span>          ",port=" + port).setDaemon(true).build());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        Reader reader = new Reader();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        readers[i] = reader;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        readPool.execute(reader);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>      // Register accepts on the server socket with the selector.<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      this.setDaemon(true);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<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>    private class Reader implements Runnable {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      private volatile boolean adding = false;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      private final Selector readSelector;<a name="line.652"></a>
+<span class="sourceLineNo">615</span>    private ServerSocketChannel acceptChannel = null; //the accept channel<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    private Selector selector = null; //the selector that we use for the server<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    private Reader[] readers = null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    private int currentReader = 0;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    private Random rand = new Random();<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    private long lastCleanupRunTime = 0; //the last time when a cleanup connec-<a name="line.620"></a>
+<span class="sourceLineNo">621</span>                                         //-tion (for idle connections) ran<a name="line.621"></a>
+<span class="sourceLineNo">622</span>    private long cleanupInterval = 10000; //the minimum interval between<a name="line.622"></a>
+<span class="sourceLineNo">623</span>                                          //two cleanup runs<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    private int backlogLength;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>    private ExecutorService readPool;<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public Listener(final String name) throws IOException {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      super(name);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      backlogLength = conf.getInt("hbase.ipc.server.listen.queue.size", 128);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      // Create a new server socket and set to non blocking mode<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      acceptChannel = ServerSocketChannel.open();<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      acceptChannel.configureBlocking(false);<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Bind the server socket to the binding addrees (can be different from the default interface)<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      bind(acceptChannel.socket(), bindAddress, backlogLength);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      port = acceptChannel.socket().getLocalPort(); //Could be an ephemeral port<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      address = (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress();<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      // create a selector;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      selector= Selector.open();<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>      readers = new Reader[readThreads];<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      readPool = Executors.newFixedThreadPool(readThreads,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        new ThreadFactoryBuilder().setNameFormat(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          "RpcServer.reader=%d,bindAddress=" + bindAddress.getHostName() +<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          ",port=" + port).setDaemon(true).build());<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      for (int i = 0; i &lt; readThreads; ++i) {<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        Reader reader = new Reader();<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        readers[i] = reader;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        readPool.execute(reader);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      }<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      LOG.info(getName() + ": started " + readThreads + " reader(s) listening on port=" + port);<a name="line.652"></a>
 <span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>      Reader() throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        this.readSelector = Selector.open();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      @Override<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      public void run() {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        try {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          doRunLoop();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        } finally {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>          try {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            readSelector.close();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          } catch (IOException ioe) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>        }<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>      private synchronized void doRunLoop() {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        while (running) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span>          try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>            readSelector.select();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>            while (adding) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              this.wait(1000);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>            }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>            while (iter.hasNext()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>              SelectionKey key = iter.next();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>              iter.remove();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>              if (key.isValid()) {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>                if (key.isReadable()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>                  doRead(key);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>                }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>              }<a name="line.686"></a>
+<span class="sourceLineNo">654</span>      // Register accepts on the server socket with the selector.<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      acceptChannel.register(selector, SelectionKey.OP_ACCEPT);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      this.setName("RpcServer.listener,port=" + port);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.setDaemon(true);<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>    private class Reader implements Runnable {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      private volatile boolean adding = false;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      private final Selector readSelector;<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>      Reader() throws IOException {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        this.readSelector = Selector.open();<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 void run() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        try {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          doRunLoop();<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        } finally {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          try {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>            readSelector.close();<a name="line.674"></a>
+<span class="sourceLineNo">675</span>          } catch (IOException ioe) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>            LOG.error(getName() + ": error closing read selector in " + getName(), ioe);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>          }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        }<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>      private synchronized void doRunLoop() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        while (running) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>          try {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            readSelector.select();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>            while (adding) {<a name="line.685"></a>
+<span class="sourceLineNo">686</span>              this.wait(1000);<a name="line.686"></a>
 <span class="sourceLineNo">687</span>            }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          } catch (InterruptedException e) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            LOG.debug("Interrupted while sleeping");<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            return;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          } catch (IOException ex) {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>            LOG.info(getName() + ": IOException in Reader", ex);<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">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>      /**<a name="line.697"></a>
-<span class="sourceLineNo">698</span>       * This gets reader into the state that waits for the new channel<a name="line.698"></a>
-<span class="sourceLineNo">699</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.699"></a>
-<span class="sourceLineNo">700</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.700"></a>
-<span class="sourceLineNo">701</span>       * it will return even if there is nothing to read and wait<a name="line.701"></a>
-<span class="sourceLineNo">702</span>       * in while(adding) for finishAdd call<a name="line.702"></a>
-<span class="sourceLineNo">703</span>       */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      public void startAdd() {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        adding = true;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        readSelector.wakeup();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span><a name="line.708"></a>
-<span class="sourceLineNo">709</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        throws IOException {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      public synchronized void finishAdd() {<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        adding = false;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        this.notify();<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">688</span><a name="line.688"></a>
+<span class="sourceLineNo">689</span>            Iterator&lt;SelectionKey&gt; iter = readSelector.selectedKeys().iterator();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>            while (iter.hasNext()) {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>              SelectionKey key = iter.next();<a name="line.691"></a>
+<span class="sourceLineNo">692</span>              iter.remove();<a name="line.692"></a>
+<span class="sourceLineNo">693</span>              if (key.isValid()) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>                if (key.isReadable()) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>                  doRead(key);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>                }<a name="line.696"></a>
+<span class="sourceLineNo">697</span>              }<a name="line.697"></a>
+<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          } catch (InterruptedException e) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>            LOG.debug("Interrupted while sleeping");<a name="line.700"></a>
+<span class="sourceLineNo">701</span>            return;<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          } catch (IOException ex) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>            LOG.info(getName() + ": IOException in Reader", ex);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          }<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>      /**<a name="line.708"></a>
+<span class="sourceLineNo">709</span>       * This gets reader into the state that waits for the new channel<a name="line.709"></a>
+<span class="sourceLineNo">710</span>       * to be registered with readSelector. If it was waiting in select()<a name="line.710"></a>
+<span class="sourceLineNo">711</span>       * the thread will be woken up, otherwise whenever select() is called<a name="line.711"></a>
+<span class="sourceLineNo">712</span>       * it will return even if there is nothing to read and wait<a name="line.712"></a>
+<span class="sourceLineNo">713</span>       * in while(adding) for finishAdd call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>       */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      public void startAdd() {<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        adding = true;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        readSelector.wakeup();<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
 <span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * to scan and also have a limit on the number of the connections<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.722"></a>
-<span class="sourceLineNo">723</span>     * for which the connection was idle. If 'force' is true then all<a name="line.723"></a>
-<span class="sourceLineNo">724</span>     * connections will be looked at for the cleanup.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>     * @param force all connections will be looked at for cleanup<a name="line.725"></a>
-<span class="sourceLineNo">726</span>     */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    private void cleanupConnections(boolean force) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      if (force || numConnections &gt; thresholdIdleConnections) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        long currentTime = System.currentTimeMillis();<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        if (!force &amp;&amp; (currentTime - lastCleanupRunTime) &lt; cleanupInterval) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          return;<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        }<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        int start = 0;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        int end = numConnections - 1;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        if (!force) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          start = rand.nextInt() % numConnections;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          end = rand.nextInt() % numConnections;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          int temp;<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          if (end &lt; start) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>            temp = start;<a name="line.740"></a>
-<span class="sourceLineNo">741</span>            start = end;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>            end = temp;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>          }<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        int i = start;<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        int numNuked = 0;<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        while (i &lt;= end) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          Connection c;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          synchronized (connectionList) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            try {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>              c = connectionList.get(i);<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            } catch (Exception e) {return;}<a name="line.752"></a>
-<span class="sourceLineNo">753</span>          }<a name="line.753"></a>
-<span class="sourceLineNo">754</span>          if (c.timedOut(currentTime)) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>            if (LOG.isDebugEnabled())<a name="line.755"></a>
-<span class="sourceLineNo">756</span>              LOG.debug(getName() + ": disconnecting client " + c.getHostAddress());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>            closeConnection(c);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>            numNuked++;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>            end--;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>            //noinspection UnusedAssignment<a name="line.760"></a>
-<span class="sourceLineNo">761</span>            c = null;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>            if (!force &amp;&amp; numNuked == maxConnectionsToNuke) break;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>          }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>          else i++;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        lastCleanupRunTime = System.currentTimeMillis();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    @Override<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    public void run() {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.info(getName() + ": starting");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      while (running) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        SelectionKey key = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>        try {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>          selector.select(); // FindBugs IS2_INCONSISTENT_SYNC<a name="line.776"></a>
-<span class="sourceLineNo">777</span>          Iterator&lt;SelectionKey&gt; iter = selector.selectedKeys().iterator();<a name="line.777"></a>
-<span class="sourceLineNo">778</span>          while (iter.hasNext()) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>            key = iter.next();<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            iter.remove();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>            try {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>              if (key.isValid()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>                if (key.isAcceptable())<a name="line.783"></a>
-<span class="sourceLineNo">784</span>                  doAccept(key);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>              }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>            } catch (IOException ignored) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>            }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>            key = null;<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        } catch (OutOfMemoryError e) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          if (errorHandler != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (errorHandler.checkOOME(e)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              LOG.info(getName() + ": exiting on OutOfMemoryError");<a name="line.794"></a>
-<span class="sourceLineNo">795</span>              closeCurrentConnection(key, e);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>              cleanupConnections(true);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>              return;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>            }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          } else {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>            // we can run out of memory if we have too many threads<a name="line.800"></a>
-<span class="sourceLineNo">801</span>            // log the event and sleep for a minute and give<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            // some thread(s) a chance to finish<a name="line.802"></a>
-<span class="sourceLineNo">803</span>            LOG.warn(getName() + ": OutOfMemoryError in server select", e);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            closeCurrentConnection(key, e);<a name="line.804"></a>
-<span class="sourceLineNo">805</span>            cleanupConnections(true);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            try {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              Thread.sleep(60000);<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            } catch (InterruptedException ex) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>              LOG.debug("Interrupted while sleeping");<a name="line.809"></a>
-<span class="sourceLineNo">810</span>              return;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>          }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        } catch (Exception e) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          closeCurrentConnection(key, e);<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        }<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        cleanupConnections(false);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      LOG.info(getName() + ": stopping");<a name="line.819"></a>
-<span class="sourceLineNo">820</span><a name="line.820"></a>
-<span class="sourceLineNo">821</span>      synchronized (this) {<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        try {<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          acceptChannel.close();<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          selector.close();<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        } catch (IOException ignored) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          if (LOG.isTraceEnabled()) LOG.trace("ignored", ignored);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        }<a name="line.827"></a>
-<span class="sourceLineNo">828</span><a name="line.828"></a>
-<span class="sourceLineNo">829</span>        selector= null;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        acceptChannel= null;<a name="line.830"></a>
+<span class="sourceLineNo">720</span>      public synchronized SelectionKey registerChannel(SocketChannel channel)<a name="line.720"></a>
+<span class="sourceLineNo">721</span>        throws IOException {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        return channel.register(readSelector, SelectionKey.OP_READ);<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>      public synchronized void finishAdd() {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        adding = false;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        this.notify();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>    /** cleanup connections from connectionList. Choose a random range<a name="line.731"></a>
+<span class="sourceLineNo">732</span>     * to scan and also have a limit on the number of the connections<a name="line.732"></a>
+<span class="sourceLineNo">733</span>     * that will be cleanedup per run. The criteria for cleanup is the time<a name="line.733"></a>
+<span class="sourceLineNo">734</span>     * for which the connection was idle. If 'force' is true then all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>     * connections will be looked at for the cleanup.<a name="line.735"></a>
+<span class=

<TRUNCATED>

[41/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 081e785..7b6e61a 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -122,8 +122,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">StateMachineProcedure.Flow</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="strong">RootProcedureState.State</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="strong">StateMachineProcedure.Flow</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 c18488b..1341690 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.251">RSRpcServices.RegionScannerCloseCallBack</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.254">RSRpcServices.RegionScannerCloseCallBack</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/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>
@@ -195,7 +195,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.253">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.256">scanner</a></pre>
 </li>
 </ul>
 </li>
@@ -212,7 +212,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices.RegionScannerCloseCallBack</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.255">RSRpcServices.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.258">RSRpcServices.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>
@@ -229,7 +229,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.260">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerCloseCallBack.html#line.263">run</a>()
          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run()">RpcCallback</a></code></strong></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 bb23d12..39a3b42 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.317">RSRpcServices.RegionScannerHolder</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.320">RSRpcServices.RegionScannerHolder</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Holder class which holds the RegionScanner, nextCallSeq and RpcCallbacks together.</div>
 </li>
@@ -215,7 +215,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextCallSeq</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.318">nextCallSeq</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.321">nextCallSeq</a></pre>
 </li>
 </ul>
 <a name="s">
@@ -224,7 +224,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>s</h4>
-<pre>private&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.319">s</a></pre>
+<pre>private&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.322">s</a></pre>
 </li>
 </ul>
 <a name="r">
@@ -233,7 +233,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>r</h4>
-<pre>private&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.320">r</a></pre>
+<pre>private&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.323">r</a></pre>
 </li>
 </ul>
 <a name="closeCallBack">
@@ -242,7 +242,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>closeCallBack</h4>
-<pre>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.321">closeCallBack</a></pre>
+<pre>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.324">closeCallBack</a></pre>
 </li>
 </ul>
 <a name="shippedCallback">
@@ -251,7 +251,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>shippedCallback</h4>
-<pre>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.322">shippedCallback</a></pre>
+<pre>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.325">shippedCallback</a></pre>
 </li>
 </ul>
 </li>
@@ -268,7 +268,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices.RegionScannerHolder</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.324">RSRpcServices.RegionScannerHolder</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;s,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.327">RSRpcServices.RegionScannerHolder</a>(<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,
                                  <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a>&nbsp;shippedCallback)</pre>
@@ -288,7 +288,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextCallSeq</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.332">getNextCallSeq</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.335">getNextCallSeq</a>()</pre>
 </li>
 </ul>
 <a name="incNextCallSeq()">
@@ -297,7 +297,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incNextCallSeq</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.336">incNextCallSeq</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.339">incNextCallSeq</a>()</pre>
 </li>
 </ul>
 <a name="rollbackNextCallSeq()">
@@ -306,7 +306,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rollbackNextCallSeq</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.340">rollbackNextCallSeq</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerHolder.html#line.343">rollbackNextCallSeq</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 4ede256..337f06b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.268">RSRpcServices.RegionScannerShippedCallBack</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.271">RSRpcServices.RegionScannerShippedCallBack</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/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>
@@ -205,7 +205,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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.270">scannerName</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.273">scannerName</a></pre>
 </li>
 </ul>
 <a name="scanner">
@@ -214,7 +214,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.271">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.274">scanner</a></pre>
 </li>
 </ul>
 <a name="lease">
@@ -223,7 +223,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.272">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.275">lease</a></pre>
 </li>
 </ul>
 </li>
@@ -240,7 +240,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices.RegionScannerShippedCallBack</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.274">RSRpcServices.RegionScannerShippedCallBack</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;scannerName,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.277">RSRpcServices.RegionScannerShippedCallBack</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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>
@@ -259,7 +259,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.281">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannerShippedCallBack.html#line.284">run</a>()
          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run()">RpcCallback</a></code></strong></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 8591b71..11e922a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.295">RSRpcServices.RegionScannersCloseCallBack</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.298">RSRpcServices.RegionScannersCloseCallBack</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/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
@@ -200,7 +200,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/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/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.296">scanners</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/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.299">scanners</a></pre>
 </li>
 </ul>
 </li>
@@ -217,7 +217,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices.RegionScannersCloseCallBack</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.295">RSRpcServices.RegionScannersCloseCallBack</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.298">RSRpcServices.RegionScannersCloseCallBack</a>()</pre>
 </li>
 </ul>
 </li>
@@ -234,7 +234,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.298">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.301">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()">
@@ -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.RegionScannersCloseCallBack.html#line.303">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.RegionScannersCloseCallBack.html#line.306">run</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run()">RpcCallback</a></code></strong></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/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 4a54d26..9e8b968 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.349">RSRpcServices.ScannerListener</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#line.352">RSRpcServices.ScannerListener</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/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
@@ -196,7 +196,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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.350">scannerName</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.353">scannerName</a></pre>
 </li>
 </ul>
 </li>
@@ -213,7 +213,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseLis
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RSRpcServices.ScannerListener</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.352">RSRpcServices.ScannerListener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;n)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.355">RSRpcServices.ScannerListener</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;n)</pre>
 </li>
 </ul>
 </li>
@@ -230,7 +230,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.357">leaseExpired</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/RSRpcServices.ScannerListener.html#line.360">leaseExpired</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseListener.html#leaseExpired()">LeaseListener</a></code></strong></div>
 <div class="block">When a lease expires, this method is called.</div>
 <dl>


[16/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
index 7785861..4617466 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
@@ -100,7 +100,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.87">TestHBaseFsckOneRS</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.93">TestHBaseFsckOneRS</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></pre>
 </li>
 </ul>
@@ -189,69 +189,80 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testCoveredStartKey()">testCoveredStartKey</a></strong>()</code>
 <div class="block">This creates and fixes a bad table where a region overlaps two regions --
  a start key contained in another region and its end key is contained in
  yet another region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testDegenerateRegions()">testDegenerateRegions</a></strong>()</code>
 <div class="block">This creates and fixes a bad table with regions that has startkey == endkey</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testErrorReporter()">testErrorReporter</a></strong>()</code>
 <div class="block">Test pluggable error reporter.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testFixAssignmentsAndNoHdfsChecking()">testFixAssignmentsAndNoHdfsChecking</a></strong>()</code>
 <div class="block">Test -noHdfsChecking option can detect and fix assignments issue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testFixByTable()">testFixByTable</a></strong>()</code>
 <div class="block">This creates two tables and mess both of them and fix them one by one</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testFixHdfsHolesNotWorkingWithNoHdfsChecking()">testFixHdfsHolesNotWorkingWithNoHdfsChecking</a></strong>()</code>
 <div class="block">Test -fixHdfsHoles doesn't work with -noHdfsChecking option,
  and -noHdfsChecking can't detect orphan Hdfs region.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testFixMetaNotWorkingWithNoHdfsChecking()">testFixMetaNotWorkingWithNoHdfsChecking</a></strong>()</code>
 <div class="block">Test -noHdfsChecking option can detect region is not in meta but deployed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testHBaseFsckClean()">testHBaseFsckClean</a></strong>()</code>
 <div class="block">This creates a clean table and confirms that the table is clean.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testHbckAfterRegionMerge()">testHbckAfterRegionMerge</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testHbckFixOrphanTable()">testHbckFixOrphanTable</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testHbckThreadpooling()">testHbckThreadpooling</a></strong>()</code>
 <div class="block">Test thread pooling in the case where there are more regions than threads</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing</a></strong>()</code>
+<div class="block">This creates and fixes a bad table with a missing region -- hole in meta
+ and data present but .regioinfino missing (an orphan hdfs region)in the fs.</div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testLingeringSplitParent()">testLingeringSplitParent</a></strong>()</code>
@@ -290,36 +301,63 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testNotInHdfs()">testNotInHdfs</a></strong>()</code>
+<div class="block">This creates and fixes a bad table with a region that is in meta but has
+ no deployment or data hdfs</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testNotInMetaHole()">testNotInMetaHole</a></strong>()</code>
+<div class="block">This creates fixes a bad table with a hole in meta.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHole</a></strong>()</code>
+<div class="block">This creates and fixes a bad table with a region that is missing meta and
+ not assigned to a region server.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testNoVersionFile()">testNoVersionFile</a></strong>()</code>
 <div class="block">when the hbase.version file missing, It is fix the fault.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testOverlapAndOrphan()">testOverlapAndOrphan</a></strong>()</code>
 <div class="block">This creates and fixes a bad table where a region is completely contained
  by another region, and there is a hole (sort of like a bad split)</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testParallelHbck()">testParallelHbck</a></strong>()</code>
 <div class="block">This test makes sure that parallel instances of Hbck is disabled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testParallelWithRetriesHbck()">testParallelWithRetriesHbck</a></strong>()</code>
 <div class="block">This test makes sure that with enough retries both parallel instances
  of hbck will be completed successfully.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testQuarantineCorruptHFile()">testQuarantineCorruptHFile</a></strong>()</code>
 <div class="block">This creates a table and then corrupts an hfile.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir</a></strong>()</code>
+<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
+ has removed an colfam dir before the corruption checker got to it.</div>
+</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testQuarantineMissingHFile()">testQuarantineMissingHFile</a></strong>()</code>
@@ -329,44 +367,51 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testReadOnlyProperty()">testReadOnlyProperty</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir</a></strong>()</code>
+<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
+ has removed a region dir before the corruption checker got to it.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testRegionBoundariesCheck()">testRegionBoundariesCheck</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testReadOnlyProperty()">testReadOnlyProperty</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testRegionBoundariesCheck()">testRegionBoundariesCheck</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testRegionDeployedNotInHdfs()">testRegionDeployedNotInHdfs</a></strong>()</code>
 <div class="block">This creates and fixes a bad table with a missing region which is the 1st region -- hole in
  meta and data missing in the fs.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testRegionHole()">testRegionHole</a></strong>()</code>
 <div class="block">This creates and fixes a bad table with a missing region -- hole in meta
  and data missing in the fs.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testRegionShouldNotBeDeployed()">testRegionShouldNotBeDeployed</a></strong>()</code>
 <div class="block">The region is not deployed when the table is disabled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testSplitDaughtersNotInMeta()">testSplitDaughtersNotInMeta</a></strong>()</code>
 <div class="block">Split crashed after write to hbase:meta finished for the parent region, but
  failed to write daughters (pre HBASE-7721 codebase)</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testTableWithNoRegions()">testTableWithNoRegions</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#testValidLingeringSplitParent()">testValidLingeringSplitParent</a></strong>()</code>
 <div class="block">Tests that LINGERING_SPLIT_PARENT is not erroneously reported for
@@ -379,7 +424,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInHdfs()">testNotInHdfs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaHole()">testNotInMetaHole</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHol
 e</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -408,7 +453,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestHBaseFsckOneRS</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.87">TestHBaseFsckOneRS</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.93">TestHBaseFsckOneRS</a>()</pre>
 </li>
 </ul>
 </li>
@@ -425,7 +470,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.90">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.96">setUpBeforeClass</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -437,7 +482,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.123">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.129">tearDownAfterClass</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -449,7 +494,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.131">setUp</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.137">setUp</a>()</pre>
 </li>
 </ul>
 <a name="testHBaseFsckClean()">
@@ -458,7 +503,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testHBaseFsckClean</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.140">testHBaseFsckClean</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.146">testHBaseFsckClean</a>()
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates a clean table and confirms that the table is clean.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -471,7 +516,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testHbckThreadpooling</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.164">testHbckThreadpooling</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.170">testHbckThreadpooling</a>()
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test thread pooling in the case where there are more regions than threads</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -484,7 +529,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testTableWithNoRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.183">testTableWithNoRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.189">testTableWithNoRegions</a>()
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -496,7 +541,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testHbckFixOrphanTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.216">testHbckFixOrphanTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.222">testHbckFixOrphanTable</a>()
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -508,7 +553,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testReadOnlyProperty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.265">testReadOnlyProperty</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.271">testReadOnlyProperty</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -520,7 +565,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testOverlapAndOrphan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.285">testOverlapAndOrphan</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.291">testOverlapAndOrphan</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates and fixes a bad table where a region is completely contained
  by another region, and there is a hole (sort of like a bad split)</div>
@@ -534,7 +579,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testCoveredStartKey</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.330">testCoveredStartKey</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.336">testCoveredStartKey</a>()
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates and fixes a bad table where a region overlaps two regions --
  a start key contained in another region and its end key is contained in
@@ -549,7 +594,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionHole</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.370">testRegionHole</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.376">testRegionHole</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates and fixes a bad table with a missing region -- hole in meta
  and data missing in the fs.</div>
@@ -563,7 +608,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionShouldNotBeDeployed</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.403">testRegionShouldNotBeDeployed</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.409">testRegionShouldNotBeDeployed</a>()
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">The region is not deployed when the table is disabled.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -576,7 +621,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testParallelHbck</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.466">testParallelHbck</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.472">testParallelHbck</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This test makes sure that parallel instances of Hbck is disabled.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -589,7 +634,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testParallelWithRetriesHbck</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.516">testParallelWithRetriesHbck</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.522">testParallelWithRetriesHbck</a>()
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This test makes sure that with enough retries both parallel instances
  of hbck will be completed successfully.</div>
@@ -603,7 +648,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionBoundariesCheck</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.562">testRegionBoundariesCheck</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.568">testRegionBoundariesCheck</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -615,7 +660,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testHbckAfterRegionMerge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.578">testHbckAfterRegionMerge</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.584">testHbckAfterRegionMerge</a>()
                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -627,7 +672,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testNoHdfsTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.629">testNoHdfsTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.635">testNoHdfsTable</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates entries in hbase:meta with no hdfs data.  This should cleanly
  remove the table.</div>
@@ -641,7 +686,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testNoVersionFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.669">testNoVersionFile</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.675">testNoVersionFile</a>()
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">when the hbase.version file missing, It is fix the fault.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -654,7 +699,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testNoTableState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.687">testNoTableState</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.693">testNoTableState</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -666,7 +711,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testFixByTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.715">testFixByTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.721">testFixByTable</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates two tables and mess both of them and fix them one by one</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -679,7 +724,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testLingeringSplitParent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.759">testLingeringSplitParent</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.765">testLingeringSplitParent</a>()
                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">A split parent in meta, in hdfs, and not deployed</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -692,7 +737,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testValidLingeringSplitParent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.843">testValidLingeringSplitParent</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.849">testValidLingeringSplitParent</a>()
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests that LINGERING_SPLIT_PARENT is not erroneously reported for
  valid cases where the daughters are there.</div>
@@ -706,7 +751,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testSplitDaughtersNotInMeta</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.896">testSplitDaughtersNotInMeta</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.902">testSplitDaughtersNotInMeta</a>()
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Split crashed after write to hbase:meta finished for the parent region, but
  failed to write daughters (pre HBASE-7721 codebase)</div>
@@ -720,7 +765,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testMissingFirstRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.978">testMissingFirstRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.984">testMissingFirstRegion</a>()
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates and fixes a bad table with a missing region which is the 1st region -- hole in
  meta and data missing in the fs.</div>
@@ -734,7 +779,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionDeployedNotInHdfs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1006">testRegionDeployedNotInHdfs</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1012">testRegionDeployedNotInHdfs</a>()
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates and fixes a bad table with a missing region which is the 1st region -- hole in
  meta and data missing in the fs.</div>
@@ -748,7 +793,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testMissingLastRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1034">testMissingLastRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1040">testMissingLastRegion</a>()
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates and fixes a bad table with missing last region -- hole in meta and data missing in
  the fs.</div>
@@ -762,7 +807,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testFixAssignmentsAndNoHdfsChecking</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1062">testFixAssignmentsAndNoHdfsChecking</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1068">testFixAssignmentsAndNoHdfsChecking</a>()
                                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test -noHdfsChecking option can detect and fix assignments issue.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -775,7 +820,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testFixMetaNotWorkingWithNoHdfsChecking</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1115">testFixMetaNotWorkingWithNoHdfsChecking</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1121">testFixMetaNotWorkingWithNoHdfsChecking</a>()
                                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test -noHdfsChecking option can detect region is not in meta but deployed.
  However, it can not fix it without checking Hdfs because we need to get
@@ -790,7 +835,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testFixHdfsHolesNotWorkingWithNoHdfsChecking</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1171">testFixHdfsHolesNotWorkingWithNoHdfsChecking</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1177">testFixHdfsHolesNotWorkingWithNoHdfsChecking</a>()
                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test -fixHdfsHoles doesn't work with -noHdfsChecking option,
  and -noHdfsChecking can't detect orphan Hdfs region.</div>
@@ -804,7 +849,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testQuarantineCorruptHFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1232">testQuarantineCorruptHFile</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1238">testQuarantineCorruptHFile</a>()
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates a table and then corrupts an hfile.  Hbck should quarantine the file.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -817,7 +862,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testQuarantineMissingHFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1273">testQuarantineMissingHFile</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1279">testQuarantineMissingHFile</a>()
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
  has removed an hfile after the corruption checker learned about it.</div>
@@ -831,7 +876,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testDegenerateRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1302">testDegenerateRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1308">testDegenerateRegions</a>()
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This creates and fixes a bad table with regions that has startkey == endkey</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -844,7 +889,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testMissingRegionInfoQualifier</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1341">testMissingRegionInfoQualifier</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1347">testMissingRegionInfoQualifier</a>()
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test mission REGIONINFO_QUALIFIER in hbase:meta</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -857,7 +902,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testErrorReporter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1393">testErrorReporter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1399">testErrorReporter</a>()
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test pluggable error reporter. It can be plugged in
  from system property or configuration.</div>
@@ -871,7 +916,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <ul class="blockList">
 <li class="blockList">
 <h4>testCheckTableLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1410">testCheckTableLocks</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1416">testCheckTableLocks</a>()
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -880,15 +925,110 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <a name="testCheckReplication()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testCheckReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1485">testCheckReplication</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1491">testCheckReplication</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
 </li>
 </ul>
+<a name="testHDFSRegioninfoMissing()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testHDFSRegioninfoMissing</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1546">testHDFSRegioninfoMissing</a>()
+                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">This creates and fixes a bad table with a missing region -- hole in meta
+ and data present but .regioinfino missing (an orphan hdfs region)in the fs.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="testNotInMetaOrDeployedHole()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNotInMetaOrDeployedHole</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1583">testNotInMetaOrDeployedHole</a>()
+                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">This creates and fixes a bad table with a region that is missing meta and
+ not assigned to a region server.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="testCleanUpDaughtersNotInMetaAfterFailedSplit()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testCleanUpDaughtersNotInMetaAfterFailedSplit</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1619">testCleanUpDaughtersNotInMetaAfterFailedSplit</a>()
+                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="testNotInMetaHole()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNotInMetaHole</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1683">testNotInMetaHole</a>()
+                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">This creates fixes a bad table with a hole in meta.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="testNotInHdfs()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNotInHdfs</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1723">testNotInHdfs</a>()
+                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">This creates and fixes a bad table with a region that is in meta but has
+ no deployment or data hdfs</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="testQuarantineMissingFamdir()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testQuarantineMissingFamdir</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1762">testQuarantineMissingFamdir</a>()
+                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
+ has removed an colfam dir before the corruption checker got to it.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
+<a name="testQuarantineMissingRegionDir()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testQuarantineMissingRegionDir</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html#line.1791">testQuarantineMissingRegionDir</a>()
+                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">This creates a table and simulates the race situation where a concurrent compaction or split
+ has removed a region dir before the corruption checker got to it.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplicas.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplicas.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplicas.html
index 8dfdc7d..3ce760b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplicas.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplicas.html
@@ -204,7 +204,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInHdfs()">testNotInHdfs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaHole()">testNotInMetaHole</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHol
 e</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</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/d917c66a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckTwoRS.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckTwoRS.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckTwoRS.html
index 2e4f9a4..9f03b36 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckTwoRS.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckTwoRS.html
@@ -231,7 +231,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.h
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testCleanUpDaughtersNotInMetaAfterFailedSplit()">testCleanUpDaughtersNotInMetaAfterFailedSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testHDFSRegioninfoMissing()">testHDFSRegioninfoMissing</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInHdfs()">testNotInHdfs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaHole()">testNotInMetaHole</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testNotInMetaOrDeployedHole()">testNotInMetaOrDeployedHol
 e</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingFamdir()">testQuarantineMissingFamdir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#testQuarantineMissingRegionDir()">testQuarantineMissingRegionDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#cleanupTable(org.apache.hadoop.hbase.TableName)">cleanupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#countRows()">countRows</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createMobFileName(java.lang.String)">createMobFileName</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createRegion(org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[])">createRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#createTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[][])">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteMetaRegion(org.apache.hadoop.conf.Configuration,%20boolean,%20boolean,%20boolean)">deleteMetaRegion</a>, <a href="../../../../../org/apache/hadoop/hb
 ase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteRegion(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.HTableDescriptor,%20byte[],%20byte[],%20boolean,%20boolean,%20boolean,%20boolean,%20int)">deleteRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTable(org.apache.hadoop.hbase.HBaseTestingUtility,%20org.apache.hadoop.hbase.TableName)">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#deleteTableDir(org.apache.hadoop.hbase.TableName)">deleteTableDir</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#doQuarantineTest(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.util.HBaseFsck,%20int,%20int,%20int,%20int,%20in
 t)">doQuarantineTest</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#dumpMeta(org.apache.hadoop.hbase.TableName)">dumpMeta</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#findDeployedHSI(java.util.Map,%20org.apache.hadoop.hbase.HRegionInfo)">findDeployedHSI</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getDeployedHRIs(org.apache.hadoop.hbase.client.Admin)">getDeployedHRIs</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedHFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#getFlushedMobFile(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.TableName)">getFlushedMobFile</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupMobTable(org.apache.hadoop.hbase.TableName)">setupMobTable</a>,
  <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable(org.apache.hadoop.hbase.TableName)">setupTable</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTableWithRegionReplica(org.apache.hadoop.hbase.TableName,%20int)">setupTableWithRegionReplica</a>, <a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#undeployRegion(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionInfo)">undeployRegion</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">


[47/48] hbase-site git commit: Published site at 4bfeccb87a94cfe232ea8fc9a6f40ff5b8d3b1c5.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d917c66a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
index 5952d6a..7c00453 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html
@@ -433,654 +433,655 @@
 <span class="sourceLineNo">425</span>   * @param hfilesDir directory containing list of hfiles to be loaded into the table<a name="line.425"></a>
 <span class="sourceLineNo">426</span>   * @param table table to which hfiles should be loaded<a name="line.426"></a>
 <span class="sourceLineNo">427</span>   * @param queue queue which needs to be loaded into the table<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   * @throws IOException If any I/O or network error occurred<a name="line.428"></a>
-<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public void prepareHFileQueue(Path hfofDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      boolean validateHFile) throws IOException {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    discoverLoadQueue(queue, hfofDir, validateHFile);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private ExecutorService createExecutorService() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return pool;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      throws IOException {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    for (HColumnDescriptor family : families) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      familyNames.add(family.getNameAsString());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    while (queueIter.hasNext()) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      LoadQueueItem lqi = queueIter.next();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        unmatchedFamilies.add(familyNameInHFile);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      String msg =<a name="line.466"></a>
-<span class="sourceLineNo">467</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              + familyNames;<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      LOG.error(msg);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      throw new IOException(msg);<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><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  /**<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * {@link<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   * @param table Table to which these hfiles should be loaded to<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param conn Connection to use<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    ExecutorService pool = null;<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    try {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      pool = createExecutorService();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (pool != null) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        pool.shutdown();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
-<span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>  /**<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * them.  Any failures are re-queued for another pass with the<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * groupOrSplitPhase.<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // atomically bulk load the groups.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      final byte[] first = e.getKey().array();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        @Override<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.517"></a>
-<span class="sourceLineNo">518</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          return toRetry;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      };<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      try {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.528"></a>
-<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span>        // LQIs that are requeued to be regrouped.<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        queue.addAll(toRetry);<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>      } catch (ExecutionException e1) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        Throwable t = e1.getCause();<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (t instanceof IOException) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // At this point something unrecoverable has happened.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          // TODO Implement bulk load recovery<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        throw new IllegalStateException(t);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      } catch (InterruptedException e1) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    for (Entry&lt;ByteBuffer,<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      for (LoadQueueItem lqi: lqis) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        if (count == null) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>          count = new MutableInt();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>          filesMap.put(lqi.family, count);<a name="line.559"></a>
-<span class="sourceLineNo">560</span>        }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>        count.increment();<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.563"></a>
-<span class="sourceLineNo">564</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            + " of region with start key "<a name="line.565"></a>
-<span class="sourceLineNo">566</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          return false;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return true;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   */<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    // phase because of the puts that happen in futures.<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>    // drain LQIs and figure out bulk load groups<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    while (!queue.isEmpty()) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      final LoadQueueItem item = queue.remove();<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.593"></a>
-<span class="sourceLineNo">594</span>          return splits;<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        }<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      };<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      splittingFutures.add(pool.submit(call));<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    // get all the results.  All grouping and splitting must finish before<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    // we can attempt the atomic loads.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      try {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.603"></a>
-<span class="sourceLineNo">604</span>        if (splits != null) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          queue.addAll(splits);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      } catch (ExecutionException e1) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        Throwable t = e1.getCause();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        if (t instanceof IOException) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          LOG.error("IOException during splitting", e1);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        }<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        throw new IllegalStateException(t);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      } catch (InterruptedException e1) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<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>    return regionGroups;<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>  // unique file name for the table<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  private String getUniqueName() {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
-<span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      final Table table, byte[] startKey,<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      byte[] splitKey) throws IOException {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    final Path hfilePath = item.hfilePath;<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    // above.<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    final String TMP_DIR = "_tmp";<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    Path tmpDir = item.hfilePath.getParent();<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    if (!tmpDir.getName().equals(TMP_DIR)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      tmpDir = new Path(tmpDir, TMP_DIR);<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    LOG.info("HFile at " + hfilePath + " no longer fits inside a single " +<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    "region. Splitting...");<a name="line.642"></a>
-<span class="sourceLineNo">643</span><a name="line.643"></a>
-<span class="sourceLineNo">644</span>    String uniqueName = getUniqueName();<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    HColumnDescriptor familyDesc = table.getTableDescriptor().getFamily(item.family);<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    Path botOut = new Path(tmpDir, uniqueName + ".bottom");<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    Path topOut = new Path(tmpDir, uniqueName + ".top");<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    splitStoreFile(getConf(), hfilePath, familyDesc, splitKey, botOut, topOut);<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>    FileSystem fs = tmpDir.getFileSystem(getConf());<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    fs.setPermission(tmpDir, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    fs.setPermission(botOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    fs.setPermission(topOut, FsPermission.valueOf("-rwxrwxrwx"));<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span>    // Add these back at the *front* of the queue, so there's a lower<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // chance that the region will just split again before we get there.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    List&lt;LoadQueueItem&gt; lqis = new ArrayList&lt;LoadQueueItem&gt;(2);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    lqis.add(new LoadQueueItem(item.family, botOut));<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    lqis.add(new LoadQueueItem(item.family, topOut));<a name="line.660"></a>
-<span class="sourceLineNo">661</span><a name="line.661"></a>
-<span class="sourceLineNo">662</span>    LOG.info("Successfully split into new HFiles " + botOut + " and " + topOut);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>    return lqis;<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  }<a name="line.664"></a>
-<span class="sourceLineNo">665</span><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * Attempt to assign the given load queue item into its target region group.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * If the hfile boundary no longer fits into a region, physically splits<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   * the hfile such that the new bottom half will fit and returns the list of<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * LQI's corresponding to the resultant hfiles.<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   *<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * protected for testing<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @throws IOException<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>  protected List&lt;LoadQueueItem&gt; groupOrSplit(Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups,<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      final LoadQueueItem item, final Table table,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys)<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      throws IOException {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    final Path hfilePath = item.hfilePath;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    // fs is the source filesystem<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    if (fs == null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      fs = hfilePath.getFileSystem(getConf());<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    HFile.Reader hfr = HFile.createReader(fs, hfilePath,<a name="line.684"></a>
-<span class="sourceLineNo">685</span>        new CacheConfig(getConf()), getConf());<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    final byte[] first, last;<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    try {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      hfr.loadFileInfo();<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      first = hfr.getFirstRowKey();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      last = hfr.getLastRowKey();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }  finally {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      hfr.close();<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>    LOG.info("Trying to load hfile=" + hfilePath +<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        " first=" + Bytes.toStringBinary(first) +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        " last="  + Bytes.toStringBinary(last));<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    if (first == null || last == null) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      assert first == null &amp;&amp; last == null;<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      // TODO what if this is due to a bad HFile?<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      LOG.info("hfile " + hfilePath + " has no entries, skipping");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      return null;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    }<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (Bytes.compareTo(first, last) &gt; 0) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new IllegalArgumentException(<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      "Invalid range: " + Bytes.toStringBinary(first) +<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      " &gt; " + Bytes.toStringBinary(last));<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    }<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    int idx = Arrays.binarySearch(startEndKeys.getFirst(), first,<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        Bytes.BYTES_COMPARATOR);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    if (idx &lt; 0) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      // not on boundary, returns -(insertion index).  Calculate region it<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      // would be in.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      idx = -(idx + 1) - 1;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    final int indexForCallable = idx;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    /**<a name="line.718"></a>
-<span class="sourceLineNo">719</span>     * we can consider there is a region hole in following conditions. 1) if idx &lt; 0,then first<a name="line.719"></a>
-<span class="sourceLineNo">720</span>     * region info is lost. 2) if the endkey of a region is not equal to the startkey of the next<a name="line.720"></a>
-<span class="sourceLineNo">721</span>     * region. 3) if the endkey of the last region is not empty.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>     */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    if (indexForCallable &lt; 0) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      throw new IOException("The first region info for table "<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          + table.getName()<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    } else if ((indexForCallable == startEndKeys.getFirst().length - 1)<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        &amp;&amp; !Bytes.equals(startEndKeys.getSecond()[indexForCallable], HConstants.EMPTY_BYTE_ARRAY)) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      throw new IOException("The last region info for table "<a name="line.729"></a>
-<span class="sourceLineNo">730</span>          + table.getName()<a name="line.730"></a>
-<span class="sourceLineNo">731</span>          + " cann't be found in hbase:meta.Please use hbck tool to fix it first.");<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    } else if (indexForCallable + 1 &lt; startEndKeys.getFirst().length<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        &amp;&amp; !(Bytes.compareTo(startEndKeys.getSecond()[indexForCallable],<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          startEndKeys.getFirst()[indexForCallable + 1]) == 0)) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      throw new IOException("The endkey of one region for table "<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          + table.getName()<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          + " is not equal to the startkey of the next region in hbase:meta."<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          + "Please use hbck tool to fix it first.");<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>    boolean lastKeyInRange =<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      Bytes.compareTo(last, startEndKeys.getSecond()[idx]) &lt; 0 ||<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      Bytes.equals(startEndKeys.getSecond()[idx], HConstants.EMPTY_BYTE_ARRAY);<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    if (!lastKeyInRange) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      List&lt;LoadQueueItem&gt; lqis = splitStoreFile(item, table,<a name="line.745"></a>
-<span class="sourceLineNo">746</span>          startEndKeys.getFirst()[indexForCallable],<a name="line.746"></a>
-<span class="sourceLineNo">747</span>          startEndKeys.getSecond()[indexForCallable]);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      return lqis;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>    // group regions.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    regionGroups.put(ByteBuffer.wrap(startEndKeys.getFirst()[idx]), item);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    return null;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * Attempts to do an atomic load of many hfiles into a region.  If it fails,<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   * it returns a list of hfiles that need to be retried.  If it is successful<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * it will return an empty list.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   *<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * NOTE: To maintain row atomicity guarantees, region server callable should<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * succeed atomically and fails atomically.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   *<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * Protected for testing.<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @return empty list if success, list of items to retry on recoverable<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * failure<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  protected List&lt;LoadQueueItem&gt; tryAtomicRegionLoad(final Connection conn,<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      final TableName tableName, final byte[] first, final Collection&lt;LoadQueueItem&gt; lqis)<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  throws IOException {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>    final List&lt;Pair&lt;byte[], String&gt;&gt; famPaths =<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      new ArrayList&lt;Pair&lt;byte[], String&gt;&gt;(lqis.size());<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    for (LoadQueueItem lqi : lqis) {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      famPaths.add(Pair.newPair(lqi.family, lqi.hfilePath.toString()));<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final RegionServerCallable&lt;Boolean&gt; svrCallable =<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        new RegionServerCallable&lt;Boolean&gt;(conn, tableName, first) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      @Override<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      public Boolean call(int callTimeout) throws Exception {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        SecureBulkLoadClient secureClient = null;<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        boolean success = false;<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span>        try {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("Going to connect to server " + getLocation() + " for row "<a name="line.786"></a>
-<span class="sourceLineNo">787</span>              + Bytes.toStringBinary(getRow()) + " with hfile group " + famPaths);<a name="line.787"></a>
-<span class="sourceLineNo">788</span>          byte[] regionName = getLocation().getRegionInfo().getRegionName();<a name="line.788"></a>
-<span class="sourceLineNo">789</span>          if (!isSecureBulkLoadEndpointAvailable()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            success = ProtobufUtil.bulkLoadHFile(getStub(), famPaths, regionName, assignSeqIds);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>          } else {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            try (Table table = conn.getTable(getTableName())) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>              secureClient = new SecureBulkLoadClient(table);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              success = secureClient.bulkLoadHFiles(famPaths, fsDelegationToken.getUserToken(),<a name="line.794"></a>
-<span class="sourceLineNo">795</span>                bulkToken, getLocation().getRegionInfo().getStartKey());<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          }<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          return success;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        } finally {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          //Best effort copying of files that might not have been imported<a name="line.800"></a>
-<span class="sourceLineNo">801</span>          //from the staging directory back to original location<a name="line.801"></a>
-<span class="sourceLineNo">802</span>          //in user directory<a name="line.802"></a>
-<span class="sourceLineNo">803</span>          if(secureClient != null &amp;&amp; !success) {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>            FileSystem targetFs = FileSystem.get(getConf());<a name="line.804"></a>
-<span class="sourceLineNo">805</span>         // fs is the source filesystem<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if(fs == null) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              fs = lqis.iterator().next().hfilePath.getFileSystem(getConf());<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span>            // Check to see if the source and target filesystems are the same<a name="line.809"></a>
-<span class="sourceLineNo">810</span>            // If they are the same filesystem, we will try move the files back<a name="line.810"></a>
-<span class="sourceLineNo">811</span>            // because previously we moved them to the staging directory.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>            if (FSHDFSUtils.isSameHdfs(getConf(), fs, targetFs)) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>              for(Pair&lt;byte[], String&gt; el : famPaths) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                Path hfileStagingPath = null;<a name="line.814"></a>
-<span class="sourceLineNo">815</span>                Path hfileOrigPath = new Path(el.getSecond());<a name="line.815"></a>
-<span class="sourceLineNo">816</span>                try {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>                  hfileStagingPath= new Path(secureClient.getStagingPath(bulkToken, el.getFirst()),<a name="line.817"></a>
-<span class="sourceLineNo">818</span>                    hfileOrigPath.getName());<a name="line.818"></a>
-<span class="sourceLineNo">819</span>                  if(targetFs.rename(hfileStagingPath, hfileOrigPath)) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>                    LOG.debug("Moved back file " + hfileOrigPath + " from " +<a name="line.820"></a>
-<span class="sourceLineNo">821</span>                        hfileStagingPath);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>                  } else if(targetFs.exists(hfileStagingPath)){<a name="line.822"></a>
-<span class="sourceLineNo">823</span>                    LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.823"></a>
-<span class="sourceLineNo">824</span>                        hfileStagingPath);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>                  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>                } catch(Exception ex) {<a name="line.826"></a>
-<span class="sourceLineNo">827</span>                  LOG.debug("Unable to move back file " + hfileOrigPath + " from " +<a name="line.827"></a>
-<span class="sourceLineNo">828</span>                      hfileStagingPath, ex);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>                }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>              }<a name="line.830"></a>
-<span class="sourceLineNo">831</span>            }<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          }<a name="line.832"></a>
-<span class="sourceLineNo">833</span>        }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    };<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>    try {<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      List&lt;LoadQueueItem&gt; toRetry = new ArrayList&lt;LoadQueueItem&gt;();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>      Configuration conf = getConf();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>      boolean success = RpcRetryingCallerFactory.instantiate(conf,<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          null).&lt;Boolean&gt; newCaller()<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          .callWithRetries(svrCallable, Integer.MAX_VALUE);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      if (!success) {<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        LOG.warn("Attempt to bulk load region containing "<a name="line.844"></a>
-<span class="sourceLineNo">845</span>            + Bytes.toStringBinary(first) + " into table "<a name="line.845"></a>
-<span class="sourceLineNo">846</span>            + tableName  + " with files " + lqis<a name="line.846"></a>
-<span class="sourceLineNo">847</span>            + " failed.  This is recoverable and they will be retried.");<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        toRetry.addAll(lqis); // return lqi's to retry<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      // success<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      return toRetry;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    } catch (IOException e) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>      LOG.error("Encountered unrecoverable error from region server, additional details: "<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          + svrCallable.getExceptionMessageAdditionalDetail(), e);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      throw e;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>  }<a name="line.857"></a>
-<span class="sourceLineNo">858</span><a name="line.858"></a>
-<span class="sourceLineNo">859</span>  private boolean isSecureBulkLoadEndpointAvailable() {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>    String classes = getConf().get(CoprocessorHost.REGION_COPROCESSOR_CONF_KEY, "");<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    return classes.contains("org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint");<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  }<a name="line.862"></a>
-<span class="sourceLineNo">863</span><a name="line.863"></a>
-<span class="sourceLineNo">864</span>  /**<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   * Split a storefile into a top and bottom half, maintaining<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * the metadata, recreating bloom filters, etc.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   */<a name="line.867"></a>
-<span class="sourceLineNo">868</span>  static void splitStoreFile(<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      Configuration conf, Path inFile,<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      HColumnDescriptor familyDesc, byte[] splitKey,<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      Path bottomOut, Path topOut) throws IOException<a name="line.871"></a>
-<span class="sourceLineNo">872</span>  {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    // Open reader with no block cache, and not in-memory<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    Reference topReference = Reference.createTopReference(splitKey);<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    Reference bottomReference = Reference.createBottomReference(splitKey);<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    copyHFileHalf(conf, inFile, topOut, topReference, familyDesc);<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    copyHFileHalf(conf, inFile, bottomOut, bottomReference, familyDesc);<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  }<a name="line.879"></a>
-<span class="sourceLineNo">880</span><a name="line.880"></a>
-<span class="sourceLineNo">881</span>  /**<a name="line.881"></a>
-<span class="sourceLineNo">882</span>   * Copy half of an HFile into a new HFile.<a name="line.882"></a>
-<span class="sourceLineNo">883</span>   */<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private static void copyHFileHalf(<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      Configuration conf, Path inFile, Path outFile, Reference reference,<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      HColumnDescriptor familyDescriptor)<a name="line.886"></a>
-<span class="sourceLineNo">887</span>  throws IOException {<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    FileSystem fs = inFile.getFileSystem(conf);<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    CacheConfig cacheConf = new CacheConfig(conf);<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    HalfStoreFileReader halfReader = null;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    StoreFile.Writer halfWriter = null;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    try {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      halfReader = new HalfStoreFileReader(fs, inFile, cacheConf, reference, conf);<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      Map&lt;byte[], byte[]&gt; fileInfo = halfReader.loadFileInfo();<a name="line.894"></a>
-<span class="sourceLineNo">895</span><a name="line.895"></a>
-<span class="sourceLineNo">896</span>      int blocksize = familyDescriptor.getBlocksize();<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      Algorithm compression = familyDescriptor.getCompressionType();<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      BloomType bloomFilterType = familyDescriptor.getBloomFilterType();<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      HFileContext hFileContext = new HFileContextBuilder()<a name="line.899"></a>
-<span class="sourceLineNo">900</span>                                  .withCompression(compression)<a name="line.900"></a>
-<span class="sourceLineNo">901</span>                                  .withChecksumType(HStore.getChecksumType(conf))<a name="line.901"></a>
-<span class="sourceLineNo">902</span>                                  .withBytesPerCheckSum(HStore.getBytesPerChecksum(conf))<a name="line.902"></a>
-<span class="sourceLineNo">903</span>                                  .withBlockSize(blocksize)<a name="line.903"></a>
-<span class="sourceLineNo">904</span>                                  .withDataBlockEncoding(familyDescriptor.getDataBlockEncoding())<a name="line.904"></a>
-<span class="sourceLineNo">905</span>                                  .build();<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      halfWriter = new StoreFile.WriterBuilder(conf, cacheConf,<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          fs)<a name="line.907"></a>
-<span class="sourceLineNo">908</span>              .withFilePath(outFile)<a name="line.908"></a>
-<span class="sourceLineNo">909</span>              .withBloomType(bloomFilterType)<a name="line.909"></a>
-<span class="sourceLineNo">910</span>              .withFileContext(hFileContext)<a name="line.910"></a>
-<span class="sourceLineNo">911</span>              .build();<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      HFileScanner scanner = halfReader.getScanner(false, false, false);<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      scanner.seekTo();<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      do {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>        halfWriter.append(scanner.getCell());<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      } while (scanner.next());<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>      for (Map.Entry&lt;byte[],byte[]&gt; entry : fileInfo.entrySet()) {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        if (shouldCopyHFileMetaKey(entry.getKey())) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>          halfWriter.appendFileInfo(entry.getKey(), entry.getValue());<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>    } finally {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      if (halfWriter != null) halfWriter.close();<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      if (halfReader != null) halfReader.close(cacheConf.shouldEvictOnClose());<a name="line.925"></a>
-<span class="sourceLineNo">926</span>    }<a name="line.926"></a>
-<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
-<span class="sourceLineNo">928</span><a name="line.928"></a>
-<span class="sourceLineNo">929</span>  private static boolean shouldCopyHFileMetaKey(byte[] key) {<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return !HFile.isReservedFileInfoKey(key);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  /*<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * Infers region boundaries for a new table.<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * Parameter:<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   *   bdryMap is a map between keys to an integer belonging to {+1, -1}<a name="line.936"></a>
-<span class="sourceLineNo">937</span>   *     If a key is a start key of a file, then it maps to +1<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   *     If a key is an end key of a file, then it maps to -1<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * Algo:<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * 1) Poll on the keys in order:<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   *    a) Keep adding the mapped values to these keys (runningSum)<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   *    b) Each time runningSum reaches 0, add the start Key from when the runningSum had started to<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   *       a boundary list.<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * 2) Return the boundary list.<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   */<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  public static byte[][] inferBoundaries(TreeMap&lt;byte[], Integer&gt; bdryMap) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    ArrayList&lt;byte[]&gt; keysArray = new ArrayList&lt;byte[]&gt;();<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    int runningValue = 0;<a name="line.948"></a>
-<span class="sourceLineNo">949</span>    byte[] currStartKey = null;<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    boolean firstBoundary = true;<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span>    for (Map.Entry&lt;byte[], Integer&gt; item: bdryMap.entrySet()) {<a name="line.952"></a>
-<span class="sourceLineNo">953</span>      if (runningValue == 0) currStartKey = item.getKey();<a name="line.953"></a>
-<span class="sourceLineNo">954</span>      runningValue += item.getValue();<a name="line.954"></a>
-<span class="sourceLineNo">955</span>      if (runningValue == 0) {<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        if (!firstBoundary) keysArray.add(currStartKey);<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        firstBoundary = false;<a name="line.957"></a>
-<span class="sourceLineNo">958</span>      }<a name="line.958"></a>
-<span class="sourceLineNo">959</span>    }<a name="line.959"></a>
-<span class="sourceLineNo">960</span><a name="line.960"></a>
-<span class="sourceLineNo">961</span>    return keysArray.toArray(new byte[0][0]);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  }<a name="line.962"></a>
-<span class="sourceLineNo">963</span><a name="line.963"></a>
-<span class="sourceLineNo">964</span>  /*<a name="line.964"></a>
-<span class="sourceLineNo">965</span>   * If the table is created for the first time, then "completebulkload" reads the files twice.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>   * More modifications necessary if we want to avoid doing it.<a name="line.966"></a>
-<span class="sourceLineNo">967</span>   */<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  private void createTable(TableName tableName, String dirPath, Admin admin) throws Exception {<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    final Path hfofDir = new Path(dirPath);<a name="line.969"></a>
-<span class="sourceLineNo">970</span>    final FileSystem fs = hfofDir.getFileSystem(getConf());<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span>    // Add column families<a name="line.972"></a>
-<span class="sourceLineNo">973</span>    // Build a set of keys<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    final HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>    final TreeMap&lt;byte[], Integer&gt; map = new TreeMap&lt;byte[], Integer&gt;(Bytes.BYTES_COMPARATOR);<a name="line.975"></a>
-<span class="sourceLineNo">976</span>    visitBulkHFiles(fs, hfofDir, new BulkHFileVisitor&lt;HColumnDescriptor&gt;() {<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      @Override<a name="line.977"></a>
-<span class="sourceLineNo">978</span>      public HColumnDescriptor bulkFamily(final byte[] familyName) {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        HColumnDescriptor hcd = new HColumnDescriptor(familyName);<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        htd.addFamily(hcd);<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        return hcd;<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      @Override<a name="line.983"></a>
-<span class="sourceLineNo">984</span>      public void bulkHFile(final HColumnDescriptor hcd, final FileStatus hfileStatus)<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          throws IOException {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        Path hfile = hfileStatus.getPath();<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        HFile.Reader reader = HFile.createReader(fs, hfile,<a name="line.987"></a>
-<span class="sourceLineNo">988</span>            new CacheConfig(getConf()), getConf());<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        try {<a name="line.989"></a>
-<span class="sourceLineNo">990</span>          if (hcd.getCompressionType() != reader.getFileContext().getCompression()) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            hcd.setCompressionType(reader.getFileContext().getCompression());<a name="line.991"></a>
-<span class="sourceLineNo">992</span>            LOG.info("Setting compression " + hcd.getCompressionType().name() +<a name="line.992"></a>
-<span class="sourceLineNo">993</span>                     " for family " + hcd.toString());<a name="line.993"></a>
-<span class="sourceLineNo">994</span>          }<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          reader.loadFileInfo();<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          byte[] first = reader.getFirstRowKey();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          byte[] last  = reader.getLastRowKey();<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>          LOG.info("Trying to figure out region boundaries hfile=" + hfile +<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>            " first=" + Bytes.toStringBinary(first) +<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>            " last="  + Bytes.toStringBinary(last));<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span><a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          // To eventually infer start key-end key boundaries<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>          Integer value = map.containsKey(first)? map.get(first):0;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>          map.put(first, value+1);<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          value = map.containsKey(last)? map.get(last):0;<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>          map.put(last, value-1);<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        } finally {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          reader.close();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    });<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    byte[][] keys = LoadIncrementalHFiles.inferBoundaries(map);<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    admin.createTable(htd, keys);<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    LOG.info("Table "+ tableName +" is available!!");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  @Override<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  public int run(String[] args) throws Exception {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    if (args.length != 2) {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      usage();<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>      return -1;<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    }<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span><a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>    initialize();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    try (Connection connection = ConnectionFactory.createConnection(getConf());<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        Admin admin = connection.getAdmin()) {<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>      String dirPath = args[0];<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>      TableName tableName = TableName.valueOf(args[1]);<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span><a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>      boolean tableExists = admin.tableExists(tableName);<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>      if (!tableExists) {<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>        if ("yes".equalsIgnoreCase(getConf().get(CREATE_TABLE_CONF_KEY, "yes"))) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>          this.createTable(tableName, dirPath, admin);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        } else {<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>          String errorMsg = format("Table '%s' does not exist.", tableName);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>          LOG.error(errorMsg);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>          throw new TableNotFoundException(errorMsg);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>        }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>      }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      Path hfofDir = new Path(dirPath);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>      try (Table table = connection.getTable(tableName);<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          RegionLocator locator = connection.getRegionLocator(tableName)) {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          doBulkLoad(hfofDir, admin, table, locator);<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    return 0;<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  public static void main(String[] args) throws Exception {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    Configuration conf = HBaseConfiguration.create();<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    int ret = ToolRunner.run(conf, new LoadIncrementalHFiles(), args);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    System.exit(ret);<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>  }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  /**<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>   * Called from replication sink, where it manages bulkToken(staging directory) by itself. This is<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>   * used only when {@link SecureBulkLoadEndpoint} is configured in hbase.coprocessor.region.classes<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * property. This directory is used as a temporary directory where all files are initially<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   * copied/moved from user given directory, set all the required file permissions and then from<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>   * their it is finally loaded into a table. This should be set only when, one would like to manage<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>   * the staging directory by itself. Otherwise this tool will handle this by itself.<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * @param stagingDir staging directory path<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   */<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  public void setBulkToken(String stagingDir) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    this.bulkToken = stagingDir;<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>  }<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span><a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>}<a name="line.1075"></a>
+<span class="sourceLineNo">428</span>   * @param validateHFile if true hfiles will be validated for its format<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException If any I/O or network error occurred<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public void prepareHFileQueue(Path hfilesDir, Table table, Deque&lt;LoadQueueItem&gt; queue,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      boolean validateHFile) throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    discoverLoadQueue(queue, hfilesDir, validateHFile);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    validateFamiliesInHFiles(table, queue);<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>  // Initialize a thread pool<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private ExecutorService createExecutorService() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    ThreadFactoryBuilder builder = new ThreadFactoryBuilder();<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    builder.setNameFormat("LoadIncrementalHFiles-%1$d");<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    ExecutorService pool = new ThreadPoolExecutor(nrThreads, nrThreads, 60, TimeUnit.SECONDS,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        new LinkedBlockingQueue&lt;Runnable&gt;(), builder.build());<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return pool;<a name="line.444"></a>
+<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Checks whether there is any invalid family name in HFiles to be bulk loaded.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private void validateFamiliesInHFiles(Table table, Deque&lt;LoadQueueItem&gt; queue)<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      throws IOException {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    Collection&lt;HColumnDescriptor&gt; families = table.getTableDescriptor().getFamilies();<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    List&lt;String&gt; familyNames = new ArrayList&lt;String&gt;(families.size());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    for (HColumnDescriptor family : families) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      familyNames.add(family.getNameAsString());<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    List&lt;String&gt; unmatchedFamilies = new ArrayList&lt;String&gt;();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    Iterator&lt;LoadQueueItem&gt; queueIter = queue.iterator();<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    while (queueIter.hasNext()) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      LoadQueueItem lqi = queueIter.next();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      String familyNameInHFile = Bytes.toString(lqi.family);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (!familyNames.contains(familyNameInHFile)) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unmatchedFamilies.add(familyNameInHFile);<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>    if (unmatchedFamilies.size() &gt; 0) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      String msg =<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          "Unmatched family names found: unmatched family names in HFiles to be bulkloaded: "<a name="line.468"></a>
+<span class="sourceLineNo">469</span>              + unmatchedFamilies + "; valid family names of table " + table.getName() + " are: "<a name="line.469"></a>
+<span class="sourceLineNo">470</span>              + familyNames;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      LOG.error(msg);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      throw new IOException(msg);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Used by the replication sink to load the hfiles from the source cluster. It does the following,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * 1. {@link LoadIncrementalHFiles#groupOrSplitPhase(Table, ExecutorService, Deque, Pair)} 2.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * {@link<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * LoadIncrementalHFiles#bulkLoadPhase(Table, Connection, ExecutorService, Deque, Multimap)}<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @param table Table to which these hfiles should be loaded to<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @param conn Connection to use<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @param queue {@link LoadQueueItem} has hfiles yet to be loaded<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @param startEndKeys starting and ending row keys of the region<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  public void loadHFileQueue(final Table table, final Connection conn, Deque&lt;LoadQueueItem&gt; queue,<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    ExecutorService pool = null;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    try {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      pool = createExecutorService();<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups =<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          groupOrSplitPhase(table, pool, queue, startEndKeys);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      bulkLoadPhase(table, conn, pool, queue, regionGroups);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    } finally {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      if (pool != null) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>        pool.shutdown();<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>  }<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>   * This takes the LQI's grouped by likely regions and attempts to bulk load<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * them.  Any failures are re-queued for another pass with the<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * groupOrSplitPhase.<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  protected void bulkLoadPhase(final Table table, final Connection conn,<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) throws IOException {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    // atomically bulk load the groups.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; loadingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    for (Entry&lt;ByteBuffer, ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()){<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      final byte[] first = e.getKey().array();<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>          List&lt;LoadQueueItem&gt; toRetry =<a name="line.518"></a>
+<span class="sourceLineNo">519</span>              tryAtomicRegionLoad(conn, table.getName(), first, lqis);<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          return toRetry;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      };<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      loadingFutures.add(pool.submit(call));<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>    // get all the results.<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; future : loadingFutures) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      try {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        List&lt;LoadQueueItem&gt; toRetry = future.get();<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>        // LQIs that are requeued to be regrouped.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        queue.addAll(toRetry);<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>      } catch (ExecutionException e1) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        Throwable t = e1.getCause();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        if (t instanceof IOException) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          // At this point something unrecoverable has happened.<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          // TODO Implement bulk load recovery<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          throw new IOException("BulkLoad encountered an unrecoverable problem", t);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        }<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        LOG.error("Unexpected execution exception during bulk load", e1);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        throw new IllegalStateException(t);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (InterruptedException e1) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        LOG.error("Unexpected interrupted exception during bulk load", e1);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  private boolean checkHFilesCountPerRegionPerFamily(<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (Entry&lt;ByteBuffer,<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        ? extends Collection&lt;LoadQueueItem&gt;&gt; e: regionGroups.asMap().entrySet()) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      final Collection&lt;LoadQueueItem&gt; lqis =  e.getValue();<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      HashMap&lt;byte[], MutableInt&gt; filesMap = new HashMap&lt;byte[], MutableInt&gt;();<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      for (LoadQueueItem lqi: lqis) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>        MutableInt count = filesMap.get(lqi.family);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>        if (count == null) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          count = new MutableInt();<a name="line.559"></a>
+<span class="sourceLineNo">560</span>          filesMap.put(lqi.family, count);<a name="line.560"></a>
+<span class="sourceLineNo">561</span>        }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>        count.increment();<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        if (count.intValue() &gt; maxFilesPerRegionPerFamily) {<a name="line.563"></a>
+<span class="sourceLineNo">564</span>          LOG.error("Trying to load more than " + maxFilesPerRegionPerFamily<a name="line.564"></a>
+<span class="sourceLineNo">565</span>            + " hfiles to family " + Bytes.toStringBinary(lqi.family)<a name="line.565"></a>
+<span class="sourceLineNo">566</span>            + " of region with start key "<a name="line.566"></a>
+<span class="sourceLineNo">567</span>            + Bytes.toStringBinary(e.getKey()));<a name="line.567"></a>
+<span class="sourceLineNo">568</span>          return false;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>        }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    return true;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
+<span class="sourceLineNo">574</span><a name="line.574"></a>
+<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * @return A map that groups LQI by likely bulk load region targets.<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  private Multimap&lt;ByteBuffer, LoadQueueItem&gt; groupOrSplitPhase(final Table table,<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      ExecutorService pool, Deque&lt;LoadQueueItem&gt; queue,<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      final Pair&lt;byte[][], byte[][]&gt; startEndKeys) throws IOException {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    // &lt;region start key, LQI&gt; need synchronized only within this scope of this<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    // phase because of the puts that happen in futures.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    Multimap&lt;ByteBuffer, LoadQueueItem&gt; rgs = HashMultimap.create();<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    final Multimap&lt;ByteBuffer, LoadQueueItem&gt; regionGroups = Multimaps.synchronizedMultimap(rgs);<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>    // drain LQIs and figure out bulk load groups<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    Set&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt; splittingFutures = new HashSet&lt;Future&lt;List&lt;LoadQueueItem&gt;&gt;&gt;();<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    while (!queue.isEmpty()) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      final LoadQueueItem item = queue.remove();<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>      final Callable&lt;List&lt;LoadQueueItem&gt;&gt; call = new Callable&lt;List&lt;LoadQueueItem&gt;&gt;() {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>        public List&lt;LoadQueueItem&gt; call() throws Exception {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          List&lt;LoadQueueItem&gt; splits = groupOrSplit(regionGroups, item, table, startEndKeys);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>          return splits;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        }<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      };<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      splittingFutures.add(pool.submit(call));<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    // get all the results.  All grouping and splitting must finish before<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    // we can attempt the atomic loads.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>    for (Future&lt;List&lt;LoadQueueItem&gt;&gt; lqis : splittingFutures) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      try {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        List&lt;LoadQueueItem&gt; splits = lqis.get();<a name="line.604"></a>
+<span class="sourceLineNo">605</span>        if (splits != null) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>          queue.addAll(splits);<a name="line.606"></a>
+<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      } catch (ExecutionException e1) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>        Throwable t = e1.getCause();<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        if (t instanceof IOException) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          LOG.error("IOException during splitting", e1);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>          throw (IOException)t; // would have been thrown if not parallelized,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>        }<a name="line.613"></a>
+<span class="sourceLineNo">614</span>        LOG.error("Unexpected execution exception during splitting", e1);<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        throw new IllegalStateException(t);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      } catch (InterruptedException e1) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        LOG.error("Unexpected interrupted exception during splitting", e1);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        throw (InterruptedIOException)new InterruptedIOException().initCause(e1);<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return regionGroups;<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>  // unique file name for the table<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private String getUniqueName() {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    return UUID.randomUUID().toString().replaceAll("-", "");<a name="line.626"></a>
+<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span>  protected List&lt;LoadQueueItem&gt; splitStoreFile(final LoadQueueItem item,<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      final Table table, byte[] startKey,<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      byte[] splitKey) throws IOException {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    final Path hfilePath = item.hfilePath;<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>    // We use a '_' prefix which is ignored when walking directory trees<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    // above.<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    final String TMP_DIR = "_tmp";<a nam

<TRUNCATED>